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()
答案 0 :(得分:2)
执行违规的print语句时,number2
实例上的Test
属性尚未定义。
第一次number2
属性设置在test_func()
方法中。即在调用number2
之前尝试访问test_func()
将导致您观察到的错误。
您应该在self.number2
类的初始值设定项中为Test
指定默认值。您也可以在致电test_func()
之前致电my_func()
。但是,无论哪种方式,在Test.__init__
中初始化所有实例属性仍然是一种很好的做法。
当您尝试访问__secret_number_2
中的未定义属性my_func()
时,解释器会出于同样的原因引发异常。
答案 1 :(得分:0)
test_func
,因此number2
和__secret_number2
不存在。
需要在尝试访问它们之前调用该函数,或者使用 init 方法初始化它。