在子類中如何調用父類方法


'''
子類中調用父類方法:
子類繼承了父類的方法,然后想進行修改,注意了是基於原有的基礎上修改,那么就需要在子類中調用父類的方法
'''

# 方法一:父類名.父類方法(),當父類類名改變了,子類的各種調用都需要同步修改
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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM