继承:
class 类名(父类名)
子类继承父类,执行初始化__init__时, 子类属性要把 父类名.__init__方法(属性) 全部写上 ,在给对象赋值
如果子类对象使用父类的方法属性:
1可以在子类方法中,写上父类的方法及属性 , 父类__init__方法(属性) ————经典类写法
2或者用super调用父类方法, super(或空/或写子类名称,self).__init__(方法属性)——新式类写法
好处:不用写父类名,当改变父类名称时,可以不用重新改,或继承多个父类,使用属性或方法时,会自动排序执行
Python3.x 和 Python2.x 的一个区别是:
Python 3 可以使用直接使用 super().方法(属性)代替 super(Class, self).方法 (属性)
继承多个父类时,执行从左到右,如果父类方法名称相同,默认调用第一个父类方法,
多个子类继承同一个父类时,子类的方法各自属于自己不可以共用,
父类中的私有属性,子类不可以使用,继承父类后,一般情况下实例化子类,不会实例化父类
经典类和新式类:
新式类后面加(object)
经典类后面默认不加
继承多个父类时,如果多个初始化方法,默认走第一个父类的初始化方法,从左到右执行,如果多个嵌套继承:
class A:
class b (A):
class c (B)
class d(B,C)
广度优先——默认执行B- C- A,如果B有初始化方法,则不走其他父类,如果没有在走C执行(横向查询)
深度优先——默认执行B-A, ~~~~同上~~~~~~~ 如果B没有初始化方法,则去找B的父类(深度查询)
Python2——经典类按深度优先查询继承,新式类按广度优先查询继承
python3——经典类和新式类都按广度优先查询继承
方法重写:如果子类中方法名和父类重复,默认用子类方法,如果没有默认用父类。
如果想改变父类方法可以子类从新写父类方法,会默认执行子类方法
排列顺序 sort ():
多态:统一接口,多种实现,可以用静态方法实现,子类继承父类,重写父类方法,一种同一个方法名展现不同结果,实现多态
class 类名(父类名)
子类继承父类,执行初始化__init__时, 子类属性要把 父类名.__init__方法(属性) 全部写上 ,在给对象赋值
如果子类对象使用父类的方法属性:
1可以在子类方法中,写上父类的方法及属性 , 父类__init__方法(属性) ————经典类写法
2或者用super调用父类方法, super(或空/或写子类名称,self).__init__(方法属性)——新式类写法
好处:不用写父类名,当改变父类名称时,可以不用重新改,或继承多个父类,使用属性或方法时,会自动排序执行
Python3.x 和 Python2.x 的一个区别是:
Python 3 可以使用直接使用 super().方法(属性)代替 super(Class, self).方法 (属性)
继承多个父类时,执行从左到右,如果父类方法名称相同,默认调用第一个父类方法,
多个子类继承同一个父类时,子类的方法各自属于自己不可以共用,
父类中的私有属性,子类不可以使用,继承父类后,一般情况下实例化子类,不会实例化父类
经典类和新式类:
新式类后面加(object)
经典类后面默认不加
继承多个父类时,如果多个初始化方法,默认走第一个父类的初始化方法,从左到右执行,如果多个嵌套继承:
class A:
class b (A):
class c (B)
class d(B,C)
广度优先——默认执行B- C- A,如果B有初始化方法,则不走其他父类,如果没有在走C执行(横向查询)
深度优先——默认执行B-A, ~~~~同上~~~~~~~ 如果B没有初始化方法,则去找B的父类(深度查询)
Python2——经典类按深度优先查询继承,新式类按广度优先查询继承
python3——经典类和新式类都按广度优先查询继承
方法重写:如果子类中方法名和父类重复,默认用子类方法,如果没有默认用父类。
如果想改变父类方法可以子类从新写父类方法,会默认执行子类方法
排列顺序 sort ():
写一个__lt__(顺序)方法(self.定义要比较的属性一个新名称) return 回比较的方式 self.属性 < 新属性名称.属性
排序示例:
class Che:
def __init__(self,pinpai,yanse):
self.pinpai=pinpai
self.yanse=yanse
def qidong(self):
print("启动小汽车")
class Xiao(Che):
def __init__(self,pinpai,yanse,zuowei,):
self.zuowei=zuowei
super().__init__(pinpai,yanse)
print("品牌;{0} 颜色{1} 座位{2}".format(self.pinpai,self.yanse,self.zuowei))
def __lt__(self, other):
return self.yanse<other.yanse
def __str__(self):
return "品牌;{0} 颜色{1} 座位{2}".format(self.pinpai,self.yanse,self.zuowei)
qiche=Xiao("宝马","bb色",9)
# qiche.qidong()
qiche2=Xiao("宝马","cc色",6)
qiche3=Xiao("宝马","aa色",8)
lie=[qiche,qiche2,qiche3]
lie.sort()
for i in lie:
print(i)
#执行结果---会自动按照yanse属性abc来排序
品牌;宝马 颜色bb色 座位9
品牌;宝马 颜色cc色 座位6
品牌;宝马 颜色aa色 座位8
品牌;宝马 颜色aa色 座位8
品牌;宝马 颜色bb色 座位9
品牌;宝马 颜色cc色 座位6
多态:统一接口,多种实现,可以用静态方法实现,子类继承父类,重写父类方法,一种同一个方法名展现不同结果,实现多态