gpt4 book ai didi

python - 对基类的行为感到困惑

转载 作者:太空狗 更新时间:2023-10-30 02:14:09 25 4
gpt4 key购买 nike

这是我几个小时前提出的一个问题。

我有这个代码:

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)

我声明 bB 的一个属性?如果是,我如何检查 b 是哪个类的属性 - 子类还是父类(super class)?

最佳答案

你定义它的方式 B 没有任何属性。当您执行 print a 时,a 指的是 __init__ 方法中的局部变量 a,而不是任何属性.

如果将 print a 替换为 print self.a,您将收到与之前相同的错误消息。

关于python - 对基类的行为感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3695218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com