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中是可以省略的。

    修改后:

  • 相关阅读:
    自定义UILabel,使文字居左上显示
    xcode 7 运行项目报错 -fembed-bitcode is not supported on versions of iOS prior to 6.0
    git 如何删除本地未提交的文件
    coco2d-x技术
    mac 查看端口是否被使用
    ios 提交
    oc基础复习10-OC的id
    oc基础复习09-OC的self 和super(深入理解)
    oc基础复习08-OC的类方法
    oc基础复习07-OC的弱语法(转)
  • 原文地址:https://www.cnblogs.com/Higgerw/p/14124198.html
Copyright © 2011-2022 走看看