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所继承的父类的初始化函数

References

posted @ 2024-12-10 14:30  KaoPuNotes  阅读(3)  评论(0编辑  收藏  举报