拷贝构造函数可以重载吗,重载拷贝类构造函数
Python继承的构造函数的描述。在Python中,如果子类不覆盖__init__,则在实例化时会自动调用父类的__init__:
class Father(object):def _ _ init _ _(self,name):self . name=name print( name:% s %(self . name))def getName(self):return Father self . name class Son(Father):def getName(self):return Son self . name if _ _ name _ _= _ main _ _ :Son=Son( yujix )print(Son . getName())结果为:
Name: yujxSon yujx如果在重写__init__时实例化子类,将不会调用已经由父类定义的__init__:
class Father(object):def _ _ init _ _(self,Name):self . Name=Name print( Name:% s %(self . Name))def getName(self):return Father self . Name class Son(Father):def _ _ init _ _(self,Name):print( hi )self . Name=Name def getName(self):return Son self . Name if _ _ Name _= _ _ main _ :Son=Son( yujix )print(Son . getName())结果为:
Hisunyujx因此,如果需要子类中父类的构造函数,就需要显式调用父类的构造函数,或者不重写父类的构造函数。调用父类的构造函数怎么办?接下来就带大家学习一下超级关键词的用法。
Super()函数super()函数是一个用来调用父类(超类)的方法。
Super用来解决多重继承的问题。使用单继承时用类名直接调用父类方法没问题,但如果使用多重继承,就会涉及到找序(MRO)、重复调用(钻石继承)等各种问题。
MRO是一个类的方法解析序列表,实际上是继承父类方法时的序列表。
语法:
Super (type [,object-or-type])typeclass;对象或类型——类,通常是自身。Python3.x和Python2.x的一个区别是Python3可以直接使用super()。xxx而不是超(类,自我)。xxx:
# Python3.x实例类a: def add (self,x): y=x1 print (y)类b (a): def add (self,X): super()。add(x)b=b()b . add(2)# 3 # python 2 . x实例类A(object): # Python2.x记得继承对象def add (self,x): y=x1print (y)类b (a): def add (self)