''' 子类中调用父类方法: 子类继承了父类的方法,然后想进行修改,注意了是基于原有的基础上修改,那么就需要在子类中调用父类的方法 ''' # 方法一:父类名.父类方法(),当父类类名改变了,子类的各种调用都需要同步修改 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()