类的继承
继承Inheritace: 代码复用的高级抽象
基类-----派生类:1.基类属性是继承,2.基类方法的继承,3.派生类新增的属性,4.派生类新增的方法
object类是所有类的基类
保留属性和保留方法本质上是object类的属性和方法
print (object.__name__) print(object.__qualname__) print(object.__base__) print(object.__class__) print(object.__module__) 运行结果: object object None <class 'type'>
1.python对象的三要素:标识,类型,值
标识identity:对象一旦构建不会改变,用id() 获得,一般是内存地址
类型type:对象的类型,用type() 获得
值value :分为可变mutable和不可变immutable
2、两个与基础类有关的python内置功能
id(x):返回x的标识,Cpython用内存地址表示
x is y : 判断x和y 的标识是否相等,不判断值(只要在同一内存空间,则标识相等)
class Democlass: count = 0 def __init__(self,name): self.name = name Democlass.count += 1 def getName(self): return self.name class HumanNameClass(Democlass): def printName(self): return str(Democlass.count) + self.name dc1 = Democlass("老王") print(id(dc1),type(dc1)) print (id(Democlass),type(Democlass)) print(dc1 is Democlass) print(type(object),type(type)) #type 的类型就是type,object的类型也是type 运行结果: 1688090982328 <class '__main__.Democlass'> 1688091138840 <class 'type'> False <class 'type'> <class 'type'>
二、重载
1、属性重载
class Democlass: count = 0 def __init__(self,name): self.name = name Democlass.count += 1 class HumanNameclass(Democlass): count = 99 #属性重载 def __init__(self,name): self.name =name HumanNameclass.count-=1 def printcount(self): return str(HumanNameclass.count)+self.name dc1 = HumanNameclass("老王") print(dc1.printcount()) 运行结果:98老王
2、类的方法重载
完全重载:派生类完全重定义与1基类相同名称的方法
增量重载:派生类定义与基类相同名称的方法 增量冲在:super()
class Democlass: count = 0 def __init__(self,name): self.name = name Democlass.count += 1 def printcount(self): return str(Democlass.count) + self.name class HumanNameclass(Democlass): def __init__(self,name): self.name =name def printcount(self): #方法重载,增量重载 return super().printcount()+"同志" dc1 = HumanNameclass("老王") print(dc1.printcount()) 运行结果:0老王同志 #由于方法重载,所以并未执行Democlass中的构造方法使count+1,所以count=0
3、类的多继承
python采用深度优先,从左至右的方法实施多继承
class Democlass: def __init__(self,name): self.name = name def printname(self): return self.name class nameclass: def __init__(self,title): self.nich = title def printname(self): return self.nich + "同志" class HumanNameclass(nameclass,Democlass): pass dc1 = HumanNameclass("老王") print(dc1.printname()) #按照深度优先,从左至右的寻找方法,访问的使是nameclass基类的printname()方法 运行结果:老王同志
super()增量继承也按照深度优先,从左至右寻找对应基类方法
class Democlass: def __init__(self,name): self.name = name def printname(self): return self.name class nameclass: def __init__(self,title): self.nich = title def printname(self): return self.nich + "同志" class HumanNameclass(nameclass,Democlass): def printname(self): return super().printname() + "你好" dc1 = HumanNameclass("老王") print(dc1.printname()) 运行结果:老王同志你好

浙公网安备 33010602011771号