先看一段代码:
class A(object):
def __init__(self, name):
self.name = name
def foo(self):
return self.name
class B(A):
'''
B继承A类
'''
def __init__(self, name, id):
A.__init__(self, name)
self.id = self.id
def foo1(self):
return self.id
A._init_(self, name) 这种初始化父类的方式应该是经常可以看到的.但为什么要这样写呢?表面上,A是一个未实例化的类,为什么可以调用_init_方法?
想要了解其中的原因,首先要知道_init_是实例化一个对象,要实例化一个对象,最根本的也得这个对象存在,那么怎样创建对象?python在调用init之前调用了一个名为_new_的方法,就是这个方法创建的对象._new_是一个静态方法
>>> b = B.__new__(B) # 创建一个B类的对象
>>> b
0x7f7f0b939750> # 对象已经建立了
>>> b.__dict__ # 查看对象的属性字典
{} # 字典为空值
>>> b.__init__(name='chim', id=18) # 实例化对象
>>> B.__init__(b, name='chim', id=18) # 或者这样实例化对象
在继承实例化b之前对象已经创建了,所以B可以调用_init_()方法