문제

정의 된 모든 클래스 속성을 얻으려고합니다.

TheClass.__dict__

그러나 그것은 또한 나에게 특별한 속성을 제공합니다. 자체 정의 된 속성 만 얻을 수있는 방법이 있습니까? 아니면 직접 "청소"해야합니까?

도움이 되었습니까?

해결책

다른 해결책 :

class _BaseA(object):
    _intern = object.__dict__.keys()

class A(_BaseA):
    myattribute = 1

print filter(lambda x: x not in A._intern+['__module__'], A.__dict__.keys())

나는 이것이 매우 강력하다고 생각하지 않으며 여전히 더 나은 방법이있을 수 있습니다.

이것은 다른 답변 중 일부가 다음과 같이 지적한 기본 문제 중 일부를 차지합니다.

  • 필요하지 않습니다 'name convention' 기반 필터링
  • 자신의 마법 방법 구현을 제공합니다 __len__ 문제가되지 않습니다 (a에서 정의).

다른 팁

당신은 청소할 수 없습니다 __dict__:

AttributeError: attribute '__dict__' of 'type' objects is not writable

당신은 의존 할 수 있습니다 이름 지정 규칙:

class A(object):
    def __init__(self, arg):
        self.arg = arg

    class_attribute = "01"    

print [ a for a in A.__dict__.keys() 
        if not (a.startswith('__') and a.endswith('__')) ]

# => ['class_attribute']

물론 덮어 쓰거나 구현할 수 있기 때문에 이것은 신뢰할 수 없습니다. 특수/마법 방법 처럼 __item__ 또는 __len__ 당신의 수업에서.

간단한 것이 있다고 생각하지 않으며 왜 있을까요? 마법과 사용자 정의 속성 사이에는 언어 강화 차이가 없습니다.

'__'로 시작하는 사용자 정의 속성이있는 경우 Myyn의 솔루션이 작동하지 않습니다. 그러나 컨벤션을 기반으로 한 솔루션을 제안합니다. 자신의 클래스를 내보시하려면 자신의 명명 규칙을 정의하고 필터링 할 수 있습니다.

아마도 필요를 설명한다면 더 나은 솔루션을 찾을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top