"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 方法初始化它们。
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 方法初始化它们。