1. 程式人生 > >類的繼承和實現原理

類的繼承和實現原理

類的繼承 self. base ict pass nbsp class 輸出結果 ase

1.類的繼承實例

class Hero:
    aa = 11

    def __init__(self, name, life, damage):
        self.name = name
        self.life = life
        self.damage = damage

    def attack(self, enemy):
        enemy.life -= self.damage


class Hero1(Hero):
    pass


st1 = Hero1(gaohui, 100, 50)
print(st1.__dict__
) print(Hero1.__bases__) print(st1.aa) 輸出結果為: {name: gaohui, life: 100, damage: 50} (<class __main__.Hero>,) 11

類的繼承中一個易錯點

當父類和子類中有相同的方法時,誰的對象調就是誰的方法

class Foo:

    def f1(self):
        print(from Foo.f1)

    def f2(self):
        print(from Foo.f2)
        self.f1()  # 哪個對象調就是對象的f1 ,所以這個方法就是b的f1
class Bar(Foo): def f1(self): print(from Bar.f2) b = Bar() b.f2() 輸出結果: from Foo.f2 from Bar.f2

繼承的實現原理

當類是新式類時,在多繼承時,查找的屬性不存在時,會按廣度優先(即不會先找到父類)去找。

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): pass print(F.mro()) # 得出廣度優先選擇的順序 結果 [<class __main__.F>, <class __main__.D>, <class __main__.B>, <class __main__.E>, <class __main__.C>, <class __main__.A>, <class object>]

類的繼承和實現原理