클래스를 검사하는 방법이 필요하므로 사용자 정의 클래스 속성 인 속성을 안전하게 식별 할 수 있습니다. 문제는 dir(), inspect.getmembers() 및 friends 같은 함수는 __class__
, __doc__
, __dict__
, __hash__
과 같이 사전 정의 된 클래스 속성을 비롯하여 모든 클래스 속성을 반환한다는 점입니다. 이것은 당연히 이해할 만하 며 무시할 멤버 목록을 만들 수 있다고 주장 할 수 있습니다.하지만 불행하게도이 미리 정의 된 속성은 다른 버전의 Python으로 바뀌므로 내 프로젝트를 Python 프로젝트에서 변경 가능하도록 만듭니다. - 나는 그것을 좋아하지 않는다.파이썬 클래스 속성 검사
예 : 예에서는
>>> class A:
... a=10
... b=20
... def __init__(self):
... self.c=30
>>> dir(A)
['__doc__', '__init__', '__module__', 'a', 'b']
>>> get_user_attributes(A)
['a','b']
I 그것은 인스턴스 속성 그대로 전용 사용자 정의 클래스는 [ 'A', 'B']없는 'C'를 속성을 검색하기 위해 안전하게 원하는 위에서 . 그래서 내 질문은 ... 아무도 위의 가상 함수 get_user_attributes(cls)
도와 줄래?
P. 나는 AST 레벨에서 클래스를 파싱함으로써 문제를 해결하기 위해 약간의 시간을 보냈다. 하지만 이미 구문 분석 된 객체를 AST 노드 트리로 변환하는 방법을 찾을 수 없습니다. 클래스가 바이트 코드로 컴파일되면 모든 AST 정보가 삭제됩니다. '특별한 속성'의 양쪽 끝에서 야콥
당신은 당신이 AST에서 그것을 시도했다는 것을 언급했습니다. 즉, 클래스에 즉시 정의되고 슈퍼 클래스에 정의 된 속성 만 원한다는 의미입니까? 나는 당신이 'builtin'것들을 원하지 않는다는 것을 알고 있지만 나는이 문제에 대해 혼란스러워합니다. – aaronasterling