PYTHON3中 类的继承

继承

1:什么是继承

继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,也就是说在python中支持一个儿子继承多个爹。

新建的类成为子类或者派生类。

父类又可以成为基类或者超类。

子类会遗传父类的属性。

2:为什么要用继承

减少代码冗余(也就是重复写代码)。

3:怎么用继承:

我们定义两个类;
class parenclass1:
        pass

class parenclass2:
        pass

在定义两个类:

class subclass1:

    pass

class subclass2:
    pass

我想让 :
class parenclass1:      作为    class  subclass1:     的父类。
    pass                            pass

应该这样用: class subclass1( parenclass1):      这就表示subclass1是子类,parenclass 是subclass1 的父类
                 pass

两个父类的话怎么表达呢?如下:

class subclass2(parenclass1,parenclass2):
    pass

这就表示subclass2的父类是parenclass1,parenclass2 这两个

想要查看子类的父类 应该怎样查看呢: 用__bases__  如下:

class ParentClass1:
    pass

class ParentClass2:
    pass

class Subclass1(ParentClass1):
    pass

class Subclass2(ParentClass1,ParentClass2):
    pass

print(Subclass1.__bases__)
#打印结果:(<class ‘__main__.ParentClass1‘>,)

print(Subclass2.__bases__)
#打印结果:
(<class ‘__main__.ParentClass1‘>,
 <class ‘__main__.ParentClass2‘>)

经典类与新式类

1、只有在python2中才分新式类和经典类,python3中统一都是新式类
2、在python2中 没有显示继承的object类的类,以及该类的子类都是经典类
3、在python2中,显示的声明继承object的类,以及该类的子类都是新式类
4、在python3中,无论是否继承object,都默认 继承object,即python3中所有类均为新式类

至于经典类 与新式类的区别,后面会有讨论。

提示:如果没有指定基类, python的类会默认继承object类, object是所有python类的基类。

二、继承与抽象

继承描述的是子类与父类之间的关系,是一种什么的关系呢? 要找出这种关系, 必须先抽象在继承。

抽象即抽取类似或者说比较像的部分。

抽象分成两个层次:

1.将奥巴马和梅西这俩对象比较像的部分抽取成类;

2.将人,猪,狗这三个类比较像的部分抽取成父类。

抽象最主要的作用是划分类别(可以隔离关注点,降低复杂度)

继承:是基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象合格过程, 才能通过继承的方式去表达抽象的结构。

抽象只是分析和设计的过程,一个动作或者说一种技巧,通过抽象可以得到类

例如:我们写一个老男孩的老师与学生的类,若是不涉及到继承的话  我们正常是这样写

class OldboyTeacher:
    school = ‘oldboy‘

    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    def change_score(self):
        print(‘teacher %s is changing score ‘ %self.name)

class Oldboystudent:
    school = ‘oldboy’
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    def choose(self):
        print(‘student %s choose course‘ %self.name)

tea1 = OldboyTeacher(‘egon‘, 18, ‘male‘) #OldboyTeacher.__init__(...)
stu1=Oldboystudent(‘alex‘,73,‘female‘)

print(tea1.name,tea1.age,tea1.sex) # egon 18 male

print(stu1.name) #alex

但是我们经过分析 发现里面里面有许多重复代码, 这时我们可以用到类的继承来写了。如下:

class OldboyPeople:
    school =‘oldboy‘

    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

class Oldboyteacher(OldboyPeople):
    def change_score(self):
        print(‘teacher %s is changing score ‘ %self.name)
class Oldboystudent(OldboyPeople):
    def choose(self):
        print(‘student %s choose course‘%self.name)

tea1 = Oldboyteacher(‘egon‘, 18, ‘male‘)
stu1=Oldboystudent(‘alex‘,73,‘female‘)

print(tea1.name,tea1.age,tea1.sex)#egon 18 male
print(stu1.name) #alex

原文地址:https://www.cnblogs.com/lx3822/p/8808845.html

时间: 2024-10-10 04:50:51

PYTHON3中 类的继承的相关文章

Python3中的super()函数详解

关于Python3中的super()函数 我们都知道,在Python3中子类在继承父类的时候,当子类中的方法与父类中的方法重名时,子类中的方法会覆盖父类中的方法, 那么,如果我们想实现同时调用父类和子类中的同名方法,就需要使用到super()这个函数,用法为super().函数名() 下面是一个例子: class A1(): def go(self): print("go A1 go") class A2(): def go(self): print("go A2 go&qu

javascript“类”与继承总结和回顾-韩烨

Javascipt语法不支持"类"(class)[es6已经支持],但是有模拟类的方法.今天我主要谈谈Javascipt中模拟"类"的方法及js中继承的总结和回顾. js中实现"类"与继承,既是重点,又是难点.很多同学可能都对js中"类"与继承都有所了解,但是深入剖析的时候,感觉力不从心.模棱两可. 下面我们一起来总结一下,巩固提高一下js的基础知识.关于js的基础知识,我在之前写过一个关于js老生常谈之this,constr

javascript中的对象继承关系

相信每个学习过其他语言的同学再去学习JavaScript时就会感觉到诸多的不适应, 这真是一个颠覆我们以前的编程思想的一门语言,先不要说它的各种数据类型以及表达 式的不同了,最让我们头疼,恐怕就是面向对象的部分了,在JavaScript中,是没有给定一 个创建对象的关键词的,它不像Java中一个class就可以创建一个对象,在JavaScript中, 对象是一个十分松散的的key-value对的组合,通常,我们在创建对象时,可以通过{}来直 接生成一个对象,就像我们之前所学的,对象中有属性,有行

论python3下“多态”与“继承”中坑

1.背景: 近日切换到python3后,发现python3在多态处理上,有一些比较有意思的情况,特别记载,供大家参考... 以廖老师的python3教程中的animal 和dog的继承一节的代码做例子,上代码先: #!/usr/bin/env python3 # -*- coding: utf-8 -*- class Animal(object): def run1(self): print('Animal is running 1...') def run2(self): self.run1(

关于 python 类与继承中方法调用 的 一个小知识点记录

(1)D类,多继承于C类与B类,C类与B类继承于A类.C类中没用__init__(), C类的实例化会先寻找第一个继承类是否存在__init__(),也就是B类的__init__().因为python3中使用的是广度优先的方法,寻找路径为D-->B-->C-->A 关于其他方法的继承,也是这个顺序. class A(object): def __init__(self): print("i am A") def call(self): print("A CA

C#中是否可以继承String类

C#中是否可以继承String类? 答:String类是sealed类故不可以继承. 当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承. 在下面的示例中,类 HoverTree 从类 Keleyi 继承,但是任何类都不能从类 HoverTree 继承. class Keleyi {} sealed class HoverTree : Keleyi {} 还可以在重写基类中的虚方法或虚属性的方法或属性上使用 sealed 修饰符. 这将使您能够允许类从您的类继承,并防止它们重

python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法

对象是特征(变量)与技能(函数)的结合体而类是一系列对象共同的特征与技能的集合体 class teacher: lesson = "python" def __init__(self,name,color,age): # 只干初始化的活 self.name = name if not isinstance(name,str): raise TypeError self.color = color self.age = age def jineng(self): print('新技能')

[Android Studio] Android Studio中查看类的继承关系

转载自:http://blog.csdn.net/hyr83960944/article/details/38098091 查看类的继承关系的快捷键F4,在Android Studio常用快捷键这篇文章中,有写了.今天主要是讲一些关于这个快捷键出来的界面的一些配置,这块功能相对偏冷一些,可能很多人都会用不到.但是关于这些配置,android studio中很多都是类似的. 废话不多说,直接上图,如下图,我选中Activity,然后按F4,右边会出现一个和Activity有继承关系的图. 1.先简

类设计中几种继承方式

 通过继承能够从已有的类派生出新的类,而派生类继承了基类的特征,包括方法.正如继承一笔财产要比自己白手起家容易一样,通过继承派生出的类通常比设计新类要容易得多.下面是可以通过继承完成的一些工作. ①可以在已有类的基础上添加功能. ②可以给类添加数据. ③可以修改类方法的行为. C++有三种继承方式:公有继承.保护继承和私有继承. 一.公有继承 公有继承是最常用的方式,它建立一种is-a关系,即派生类对象也是一个基类对象,可以对基类对象执行的任何操作,也可以对派生类对象执行. ①公有继承不建立