python--继承父类

先看一段代码:

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_()方法

你可能感兴趣的:(python)