这跟在几个小时前我问过的一个问题。对基类行为感到困惑
我有这样的代码:
class A(object):
def __init__(self, a):
print 'A called.'
self.a = a
class B(A):
def __init__(self, b, a):
print 'B called.'
x = B(1, 2)
print x.a
这给了错误:AttributeError: 'B' object has no attribute 'a'
,符合市场预期。我可以通过拨打super(B, self).__init__(a)
来解决这个问题。
不过,我有这样的代码:
class A(object):
def __init__(self, a):
print 'A called.'
self.a = a
class B(A):
def __init__(self, b, a):
print 'B called.'
print a
x = B(1, 2)
,其输出是:
B called.
2
为什么这项工作?更重要的是,当我没有初始化基类时它是如何工作的?另外请注意,它不会调用A
的初始值设定项。是不是因为当我做了:
def __init__(self, b, a)
我声明b
是的B
属性?如果是,我该如何检查b
是哪个类的属性 - 子类或超类?
啊,我现在明白了。谢谢! – Jeremy 2010-09-12 14:57:12
我是否正确地调用'b'类的属性或者是否存在其他一些Pythonic术语? – Jeremy 2010-09-12 15:01:12
嗯,最重要的是,'实例变量'和'实例属性'有什么区别? – Jeremy 2010-09-12 15:02:43