특수 속성없이 클래스 객체 __dict__를 얻습니다
-
20-09-2019 - |
문제
정의 된 모든 클래스 속성을 얻으려고합니다.
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의 솔루션이 작동하지 않습니다. 그러나 컨벤션을 기반으로 한 솔루션을 제안합니다. 자신의 클래스를 내보시하려면 자신의 명명 규칙을 정의하고 필터링 할 수 있습니다.
아마도 필요를 설명한다면 더 나은 솔루션을 찾을 수 있습니다.
제휴하지 않습니다 StackOverflow