class Base: character = ‘我是父类‘ def want_basketball(self): print(‘教练我想打篮球‘) class SubClass(Base): # 通过在子类的括号之中加父类的名称 pass obj = SubClass() obj.want_basketball() # 直接调用父类的方法 如果属性和方法完全一样的话 print(obj.character)
比如好人,坏人,黄种人,白种人,黑人都是人这个大类的继承,而他们都是抽象而生成人这个类的。
class Person: def __init__(self,name,height,gender): # 定义抽象得来的公共类 self.name = name self.height = height self.gender = gender class FootBallPlayer(Person): # 通过子类名括号里面加抽象父类名起到继承的作用 def Skill(self): print(‘%s会踢足球‘%(self.name)) class BasketBallPlayer(Person): def Skill1(self): print(‘%s会打篮球‘%(self.name)) Kobe = BasketBallPlayer(‘kobe Bryant‘,‘189‘,‘male‘) # 名字身高等信息就不需要通过父类调用,直接子类调用 Kobe.Skill1() Messi = FootBallPlayer(‘Lion Messi‘,‘176‘,‘male‘) Messi.Skill()
class Foo: def f1(self): print(‘Foo.f1‘) def f2(self): print(‘Foo.f2‘) self.f1() class Bar(Foo): def f1(self): print(‘Bar.f1‘) b=Bar() b.f1() #输出 Bar.f1 b.f2() #输出 Foo.f2
派生的定义:当父类提供的属性无法完全满足子类的需求时,子类可以增加自己的属性或方法,或者覆盖父类已经存在的属性,此时子类称之为父类的派生类;
class Person: def __init__(self,name,height,gender): # 定义抽象得来的公共类 self.name = name self.height = height self.gender = gender class FootBallPlayer(Person): # 通过子类名括号里面加抽象父类名起到继承的作用 def __init__(self,name,height,gender,field): # 如果不写这两行 将不能调用name height gender属性 super().__init__(name,height,gender) # 重用父类中的代码,防止覆盖了父类中的init方法 self.field = field def Skill(self): print(‘%s会踢足球‘%(self.name)) print(self.height,self.gender,self.field)
Messi = FootBallPlayer(‘Lion Messi‘,‘176‘,‘male‘,‘grass‘)
Messi.Skill()
class Equip: # 武器装备类 def fire(self): print(‘release Fire skill‘) class Riven: # 英雄Riven的类,一个英雄需要有装备,因而需要组合Equip类 camp = ‘Noxus‘ def __init__(self, nickname): self.nickname = nickname self.equip = Equip() # 用Equip类产生一个装备,赋值给实例的equip属性 r1 = Riven(‘锐雯雯‘) r1.equip.fire() # 可以使用组合的类产生的对象所持有的方法
class A(object): def test(self): print(‘from A‘) class B(A): def test(self): print(‘from B‘) class C(A): def test(self): print(‘from C‘) class D(B): def test(self): print(‘from D‘) class E(C): def test(self): print(‘from E‘) class F(D,E): # def test(self): # print(‘from F‘) pass f1=F() f1.test() print(F.__mro__) #只有新式才有这个属性可以查看线性列表,经典类没有这个属性 #新式类继承顺序:F->D->B->E->C->A #经典类继承顺序:F->D->B->A->E->C #python3中统一都是新式类 #pyhon2中才分新式类与经典类 继承顺序
>>> F.mro() #等同于F.__mro__ [<class ‘__main__.F‘>, <class ‘__main__.D‘>, <class ‘__main__.B‘>, <class ‘__main__.E‘>, <class ‘__main__.C‘>, <class ‘__main__.A‘>, <class ‘object‘>
原文:https://www.cnblogs.com/ITchemist/p/11247632.html