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

    修改后:

  • 相关阅读:
    fast incremental backup failed on standby database
    How to find error message from OMS repository
    Examine 11g automatic block Corruption recovery
    C#继承Control实用自定义控件
    手把手教你写SHELL CODE
    编写C#控件的3种方式
    Android中跨越ACTIVITY的全局线程
    DevExpress 皮肤使用方法
    PHP讨论之什么是HOOK?
    C#制作WinForm控件
  • 原文地址:https://www.cnblogs.com/Higgerw/p/14124198.html
Copyright © 2020-2023  润新知