''' 子類中調用父類方法: 子類繼承了父類的方法,然后想進行修改,注意了是基於原有的基礎上修改,那么就需要在子類中調用父類的方法 ''' # 方法一:父類名.父類方法(),當父類類名改變了,子類的各種調用都需要同步修改 class A: money = 100 def __init__(self, name): self.name = name def one(self): print('one') @property # 實例本身調用無需加括號,類調用無效 def two(self): print('two') @classmethod # 類與實例均可調用,但參數只能使用類屬性 def three(cls): print('three %s' % cls.money) @staticmethod # 類的工具包,其實和普通函數一樣,參數就是參數,實例和類調用時必須傳參 def four(self): print('four') class B(A): money = 1000 def __init__(self, name, age): A.__init__(self, name) # 子類中調用父類的__init__方法,子類無需再self.xx=xx,但形參依舊不能少;父類調用__init__方法時,形參self不能少 self.age = age def one(self): A.one('1') # 子類中調用父類方法(父類.方法名),記得類調用方法時self形參需要傳參 print(A.money) # 子類中調用父類的數據屬性 print(B.money) print(self.name) b1 = B('alex', 18) print(b1.__dict__) # 子類B初始化函數,self和name傳給了A.__init__的self和name,name這個屬性依舊是子類B實例化對象的數據屬性 print(b1.name) b1.one() # 方法二:super() class C: money = 100 def __init__(self, name): self.name = name def test(self): print('C') class D(C): money = 1000 def __init__(self, name, age): super().__init__(name) # 等同於super(D, self).__init__(name) self.age = age def test(self): print(super().money) # 調用父類的數據屬性 super().test() # 調用父類方法,等同於super(D, self).test() d1 = D('alex', 18) d1.test()