"AttributeError" 在访问实例变量时

"AttributeError" while accessing instance variables

Python 在 运行 我的脚本时引发以下异常。有人可以解释为什么会发生这种情况以及如何解决它吗?

Traceback (most recent call last):
  File "C:\Users\vinsunny\AppData\Local\Programs\Python\Python36\test.py", line 28, in <module>
    test.my_func()
  File "C:\Users\vinsunny\AppData\Local\Programs\Python\Python36\test.py", line 23, in my_func
    print('non secret no. from test_func: ', self.number2)
AttributeError: 'Test' object has no attribute 'number2'"
class Test():

    __class_secret_number = 100

    def __secret_func(self):
        self.number1 = 1
        self.__secret_number1 = 11
        print('You cannot see this unless accessing from the Class itself')

    def test_func(self):
        self.number2 = 2
        self.__secret_number2 = 22

    def my_func(self):
        self.__secret_func()
        print('Secret no. from class: ', self.__class_secret_number)

        print('non secret no. from secret func: ', self.number1)
        print('Secret no. from secret func: ', self.__secret_number1)

        # These two prints raise an exception.
        print('non secret no. from test_func: ', self.number2)
        print('Secret no. from test_func: ', self.__secret_number2)

test = Test()
test.my_func()

在执行违规打印语句时,您的 Test 实例上的 number2 属性尚未定义。

第一次设置 number2 属性是在 test_func() 方法中。即在调用 test_func() 之前尝试访问 number2 将导致您观察到的错误。

您应该在 Test class 的初始化程序中为 self.number2 分配一个默认值。您也可以在调用 my_func() 之前调用 test_func()。但是,无论哪种方式,初始化 Test.__init__.

中的所有实例属性仍然是一个好习惯

当您尝试访问 my_func() 中未定义的属性 __secret_number_2 时,解释器将出于同样的原因引发异常。

test_func 从未被调用,因此 number2__secret_number2 不存在。

需要在尝试访问它们之前调用该函数,或者使用 init 方法初始化它们。