Pyhon的继承
1 继承中的__init__
初始化函数
1.1 子类没有定义自己的初始化函数,父类的初始化函数会被默认调用:
#定义父类:Parent
class Parent(object):
def __init__(self, name):
self.name = name
print("create an instance of:", self.__class__.__name__)
print("name attribute is:", self.name)
#定义子类Child ,继承父类Parent
class Child(Parent):
pass
#子类实例化时,由于子类没有初始化,此时父类的初始化函数就会默认被调用
#且必须传入父类的参数name
c = Child("init Child")
# 输出
# create an instance of: Child
# name attribute is: init Child
子类实例化时,由于子类没有初始化,此时父类的初始化函数就会默认被调用
且必须传入父类的参数name,不传入会报错
1.2 子类定义了自己的初始化函数,而在子类中没有显示调用父类的初始化函数,则父类的属性不会被初始化
class Parent(object):
def __init__(self, name):
self.name = name
print("create an instance of:", self.__class__.__name__)
print("name attribute is:", self.name)
def show(self):
print("this is a method in Parent class")
print("name attribute is:", self.name)
#子类继承父类
class Child(Parent):
#子类中没有显示调用父类的初始化函数
def __init__(self):
print("call __init__ from Child class")
# c = Child("init Child") # 报错
#print()
#将子类实例化
c = Child()
# 输出 call __init__ from Child class
c.show()
# 报错,因为调用了 name 变量
# print(c.name)
这种情况下,子类重写了init初始化函数,可以调用父类的函数,但是父类中所有的变量都无效。
1.3 如果子类定义了自己的初始化函数,显示调用父类,子类和父类的属性都会被初始化
class Parent(object):
def __init__(self, name):
self.name = name
print("create an instance of:", self.__class__.__name__)
print("name attribute is:", self.name)
class Child(Parent):
def __init__(self):
print("call __init__ from Child class")
super(Child,self).__init__("data from Child") #要将子类Child和self传递进去
# c = Child("init Child")
# print()
# d = Parent('tom')
c = Child()
print(c.name)
# 输出
# call __init__ from Child class
# create an instance of: Child
# name attribute is: data from Child
# data from Child
这里的super
函数表示调用Child
所继承的父类的初始化函数