为什么在Python实例化后无法访问此实例成员?

时间:2019-05-03 00:47:46

标签: python class

实例化后在承包商中声明的变量不存在?为什么?

如果声明为类变量,它将按预期工作。

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()

输出: 苹果

这是我的期望。

苹果

2 个答案:

答案 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,以了解两者之间的区别 类和实例变量。