2014-07-16 2 views
0

Exception (및 파생물) 클래스가 다른 클래스와 마찬가지로 __dict__ 특수 특성에 인스턴스 특성을 채우지 않는 이유는 무엇입니까?Exception 클래스가 __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 클래스는 다른 동작이 있습니다 :

예를 들어, object 클래스를 저장 인스턴스에서 파생 된 클래스는 __dict__ 속성에 속성

test_exception = Exception(1,2,3) 
print(test_exception.__dict__) 
print(test_exception.args) 

>>>> {} 
>>>> (1, 2, 3) 

내가 될 것으로 기대를 __dict__ 특수 속성에있는 모든 객체의 속성을 볼 수 있으므로 이것으로 혼란 스럽습니다.

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

args 인스턴스 변수 아니며 적어도 파이썬 2.7

답변

1

, 이것은 설명자입니다. 즉, Exception().args에 액세스하려고 할 때 호출되는 함수입니다.

+0

의미가 있습니다 만, 함수 인수는'args' 기술자를 통해 반환 될 때까지 내부적으로 저장됩니까? – eikonomega

+0

CPython에서 적어도 예외를 구현하는 C 데이터 구조에 저장되며 Python을 통해 직접 액세스 할 수 없습니다. – chepner

관련 문제