实例化后在承包商中声明的变量不存在?为什么?
如果声明为类变量,它将按预期工作。
class Apple():
def show(self):
print('apple')
class Basket():
def __init__(self):
apple = Apple()
basket = Basket()
basket.apple.show()
输出: AttributeError:“购物篮”对象没有属性“ apple”
class Apple():
def show(self):
print('apple')
class Basket():
apple = Apple()
basket = Basket()
basket.apple.show()
输出: 苹果
这是我的期望。
苹果
答案 0 :(得分:3)
要分配给实例变量,您需要像这样分配给self
:
class Basket():
def __init__(self):
self.apple = Apple()
否则,您将只在__init__
函数中创建一个局部变量。
答案 1 :(得分:1)
@Round:获得AttributeError
的主要原因是在第一个定义中,
变量apple
只是一个语言环境变量。
要访问它,您必须将其有效地设置为课程的属性, 那必须是实例变量或类变量。
例如,在下面的示例中:
class Apple:
def show(self):
print("apple")
class Basket:
apple = Apple()
def __init__(self):
pass
apple
是类Basket
的属性,尤其是class variable
另一方面,在下面的示例中:
class Apple:
def show(self):
print('apple')
class Basket:
def __init__(self):
self.apple = Apple()
apple
仍然是attribute
类的Basket
,但具体来说是an instance variable
。
请查看Class variable vs. Instance variable,以了解两者之间的区别 类和实例变量。