__init()__

此文转自
https://www.cnblogs.com/insane-Mr-Li/p/9758776.html
https://www.cnblogs.com/liyichen/p/5931840.html

说明及使用

1.__init__相当于对一个已构造的实例进行初始化
当一个对象被创建,Python首先创建一个空对象,然后为那个新对象调用init()方法。
这个方法函数通常用来创建对象的实例变量并执行任何其他一次性处理。
如果没有用init初始化(即赋值?)实例对象,则它不能被调用(待尝试

class A(object):
    def __init__(self,name):
        self.name=name
    def getName(self):
        return 'A '+self.name

当执行

a=A('hello')

等价于

 a=object.__new__(A)
 A.__init__(a,'hello')

2.如果子类中不重写init(),则会隐式自动调用超类中的已定义的init()

 class A(object):
     def __init__(self,name):
         self.name=name
     def getName(self):
         return 'A '+self.name
class B(A):
     def getName(self):
         return 'B '+self.name

正确,不会报错

如果重写了,则不会再自动隐式调用超类的init()

class C(A):
     def __init__(self):
         pass
     def getName(self):
         return 'C '+self.name

调用C.getName()会报错:"AttributeError: 'C' object has no attribute 'name'”

可以通过以下方法来显式调用:
(1)调用未绑定的超类构造方法(多用于旧版python阵营)

 class C(A):
     def __init__(self,name):
         A.__init__(self,name)
     def getName(self):
         return 'C '+self.name

原理:在调用了一个实例的方法时,该方法的self参数会自动绑定到实例上(称为绑定方法);如果直接调用类的方法(比如A.__init__),那么就没有实例会被绑定,可以自由提供需要的self参数(未绑定方法)。

(2)使用super函数(只在新式类中有用)

 class C(A):
     def __init__(self,name):
         super(C,self).__init__(name)
     def getName(self):
         return 'C '+self.name

原理:它会查找所有的超类,以及超类的超类,直到找到所需的特性为止。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务