Python中__init__()方法注意点

Posted 大明湖畔的守望者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中__init__()方法注意点相关的知识,希望对你有一定的参考价值。

此文转自https://www.cnblogs.com/zyxstar2003/archive/2011/03/21/1989954.html

1、__init__并不相当于C#中的构造函数,执行它的时候,实例已构造出来了

1 class A(object):
2     def __init__(self,name):
3         self.name=name
4     def getName(self):
5         return \'A \'+self.name

当我们执行

1 a=A(\'hello\')

时,可以理解为

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

即__init__作用是初始化已实例化后的对象。

2、子类可以不重写__init__,实例化子类时,会自动调用超类中已定义的__init__

1 class B(A):
2     def getName(self):
3         return \'B \'+self.name
4  
5 if __name__==\'__main__\':
6     b=B(\'hello\')
7     print b.getName()

但如果重写了__init__,实例化子类时,则不会隐式的再去调用超类中已定义的__init__

1 class C(A):
2     def __init__(self):
3         pass
4     def getName(self):
5         return \'C \'+self.name
6  
7 if __name__==\'__main__\':
8     c=C()
9     print c.getName()

则会报"AttributeError: \'C\' object has no attribute \'name\'”错误,所以如果重写了__init__,为了能使用或扩展超类中的行为,最好显式的调用超类的__init__方法

1 class C(A):
2     def __init__(self,name):
3         super(C,self).__init__(name)
4     def getName(self):
5         return \'C \'+self.name
6  
7 if __name__==\'__main__\':
8     c=C(\'hello\')    
9     print c.getName()

 

以上是关于Python中__init__()方法注意点的主要内容,如果未能解决你的问题,请参考以下文章

python-面向对象速查表-内置方法-内置函数-内置属性(只整理了部分内容)

python 中 __init__方法

python 子类继承父类__init__(转载)

详解Python中的__new__、__init__、__call__三个特殊方法

python3 module中__init__.py的需要注意的地方

在 Python __init__ 方法中使用异步等待