为什么Exception类没有填充__dict__属性?

时间:2014-07-16 18:58:07

标签: python

为什么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__特殊属性中看到所有对象的属性,所以我对此感到困惑。

1 个答案:

答案 0 :(得分:1)

在Python 2.7中,至少:

>>> type(Exception.args)
<type 'getset_descriptor'>

args不是实例变量;它是一个描述符,这意味着它是一个在您尝试访问Exception().args时调用的函数。