zoukankan      html  css  js  c++  java
  • python 继承类的初始化用法

    Python 中,子类B继承父类A时候会用class B(A):的代码形式声明B。

    class A:
    	def __init__(self, x=1, y=2):
    		self.x = x
    		self.y = y
    		print("In class A's init...")
    
    	def Aprint(self):
    		print("AAAAAAAAAAAAA")
    

    在子类B的初始化方法默认会覆盖掉父类A的初始化方法,举例:

    class B(A):
    	def __init__(self, z):
    		self.z = z
    		print("In class B's init...")
    
    	def Bprint(self):
    		print("BBBBBBBBBBBBB")
    
    demo = B(3)
    print(demo.z)
    print(demo.x)
    demo.Aprint()
    demo.Bprint()
    

    报错显示B中找不到成员x(肯定也找不到y成员):

    注释掉demo.x这行就没问题:

    说明子类只是重写了父类的__init__方法,其他方法(Aprint)得以继承。
    现在在B的__init__方法中加入一行代码:super().__init__(x, y)或者super(B, self).__init__(x, y),并且接受新的变量x、y:

    class B(A):
    	def __init__(self, z, x, y):
    		# super(B, self).__init__(x, y)
    		super().__init__(x, y)
    		self.z = z
    		print("In class B's init...")
    
    	def Bprint(self):
    		print("BBBBBBBBBBBBB")
    

    现在调用全体的变量和方法试试看:

    demo = B(3,4,10)
    print(demo.z)
    print(demo.x)
    print(demo.y)
    
    demo.Aprint()
    demo.Bprint()
    


    这说明子类B中初始化方法中添加一行super().__init__(x, y)代码会调用父类A中的初始化方法,而不会直接的覆盖父类初始化方法,同时注意传参。
    进一步地,子类中任意位置添加super().func(*args)都会调用父类中的func()函数。

    需要声明的一点是,python2中,必须使用super(B, self).func(*args)才能调用父类A中的func()函数;此外父类A也要继承自object:class A(object):,这在python3中是可以省略的。

    修改后:

  • 相关阅读:
    7月27日
    7月26日
    7月25日
    7月24日
    UI基础 选项卡
    UI基础 手势
    UI基础 小球拖拽
    UI基础 事件
    UI基础 自定义视图
    UI基础 视图控制器
  • 原文地址:https://www.cnblogs.com/Higgerw/p/14124198.html
Copyright © 2011-2022 走看看