일부 클래스에는 'pickled'라는 클래스 속성이있는 상속 계층 구조가 있습니다. 존재하는 경우 A.pickled
을 얻고 싶습니다. A가 예를 들어 B, B.pickled
등 많은 클래스에서 파생 되었더라도 (존재하지 않는 경우에도).수퍼 클래스 속성이없는 클래스 속성
지금 내 솔루션은 A
의 __mro__
을 크롤링합니다. 가능하다면 나는 더 깨끗한 해결책을 원한다.
일부 클래스에는 'pickled'라는 클래스 속성이있는 상속 계층 구조가 있습니다. 존재하는 경우 A.pickled
을 얻고 싶습니다. A가 예를 들어 B, B.pickled
등 많은 클래스에서 파생 되었더라도 (존재하지 않는 경우에도).수퍼 클래스 속성이없는 클래스 속성
지금 내 솔루션은 A
의 __mro__
을 크롤링합니다. 가능하다면 나는 더 깨끗한 해결책을 원한다.
는 __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를 검색합니다.
고맙습니다. Stackoverflow에서 운 좋게도 운이 좋았습니다. –
, 그러나 아마
try:
return object.__getattribute__(cls, 'pickled')
except AttributeError:
return None
해결하려는 문제는 무엇입니까? – SingleNegationElimination
@IfLoop 클래스 속성을 사용하여 특정 속성을 자동으로 피클합니다. 또한 다른 클래스 속성을 사용하여 자동으로 사용자 인터페이스를 생성하고, 더 많은 클래스 속성을 사용하여 매개 변수 값의 기록을 자동으로 생성합니다. 더 나은 해결책이 있습니까? –