为什么Exception
(和派生类)类不会像其他类一样将实例属性填充到__dict__
特殊属性中?
例如,从object
类派生的类存储__dict__
属性上的实例属性:
class TestClass(object):
def __init__(self, *args):
self.args = args
test = TestClass(1,2,3)
print(test.__dict__)
print(test.args)
>>>> {'args': (1, 2, 3)}
>>>> (1, 2, 3)
但是,Exception
类有不同的行为:
test_exception = Exception(1,2,3)
print(test_exception.__dict__)
print(test_exception.args)
>>>> {}
>>>> (1, 2, 3)
我希望能够在__dict__
特殊属性中看到所有对象的属性,所以我对此感到困惑。
答案 0 :(得分:1)
在Python 2.7中,至少:
>>> type(Exception.args)
<type 'getset_descriptor'>
args
不是实例变量;它是一个描述符,这意味着它是一个在您尝试访问Exception().args
时调用的函数。