在子类中如何调用父类方法


'''
子类中调用父类方法:
子类继承了父类的方法,然后想进行修改,注意了是基于原有的基础上修改,那么就需要在子类中调用父类的方法
'''

# 方法一:父类名.父类方法(),当父类类名改变了,子类的各种调用都需要同步修改
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