2014-06-10 3 views
1

일부 클래스에는 'pickled'라는 클래스 속성이있는 상속 계층 구조가 있습니다. 존재하는 경우 A.pickled을 얻고 싶습니다. A가 예를 들어 B, B.pickled 등 많은 클래스에서 파생 되었더라도 (존재하지 않는 경우에도).수퍼 클래스 속성이없는 클래스 속성

지금 내 솔루션은 A__mro__을 크롤링합니다. 가능하다면 나는 더 깨끗한 해결책을 원한다.

잘 모르겠어요
+0

해결하려는 문제는 무엇입니까? – SingleNegationElimination

+0

@IfLoop 클래스 속성을 사용하여 특정 속성을 자동으로 피클합니다. 또한 다른 클래스 속성을 사용하여 자동으로 사용자 인터페이스를 생성하고, 더 많은 클래스 속성을 사용하여 매개 변수 값의 기록을 자동으로 생성합니다. 더 나은 해결책이 있습니까? –

답변

2

__mro__을 통해 일반 검색을 우회하는 대신 클래스의 속성을 사전에 직접 찾으십시오.

return vars(cls).get('pickled', None) 

그냥 바로 너무 __dict__ 속성에 액세스 할 수 있습니다 :

return cls.__dict__.get('pickled', None) 

하지만 내장 함수를 사용하여이 이중 밑줄 속성 사전에 직접 액세스 선호되고 당신은 그에 대한 vars() function을 사용할 수 있습니다 .

object.__getattribute__은 클래스 속성을 보는 데 잘못된 방법입니다. What is the difference between type.__getattribute__ and object.__getattribute__?

type.__getattribute__은 클래스의 속성 액세스에 사용되는 것이지만 여전히 MRO를 검색합니다.

+1

고맙습니다. Stackoverflow에서 운 좋게도 운이 좋았습니다. –

0

, 그러나 아마

try: 
    return object.__getattribute__(cls, 'pickled') 
except AttributeError: 
    return None 
관련 문제