- 论坛徽章:
- 0
|
本帖最后由 flow1977 于 2014-03-26 15:22 编辑
回复 4# luxeeaaa
这个写法有个弱点:子类对象执行父类方法过程中,不能用这个写法得到爷类方法,得到的还是父类方法。
比如:
- class A(object):
- def __init__(self):
- print 'A'
- class B(A):
- def __init__(self):
- super(self.__class__, self).__init__()
- print 'B'
- class C(B):
- def __init__(self):
- super(self.__class__, self).__init__()
- print 'C'
- c = C()
复制代码 将递归溢出。原因是,在B的init中,super()找到的还是B,不是A。因为此时self.__class__是C,不是B。
正确的写法:
- class A(object):
- def __init__(self):
- print 'A'
- class B(A):
- def __init__(self):
- super(B, self).__init__()
- print 'B'
- class C(B):
- def __init__(self):
- super(C, self).__init__()
- print 'C'
- c = C()
复制代码 |
|