2014-01-30 3 views
2

@property으로 표시된 Python 클래스의 함수를 어떻게 열거합니까?Python 클래스 속성 (함수가 아님)을 열거하십시오

class MyClass: 
    @property 
    def my_property(): 
     pass 

이런 식으로 뭔가하지만 inspect.isproperty에 대한 람다 필터가없는 :

properties = inspect.getmembers(obj, inspect.isproperty) 

분명히, 이들은 관리 속성으로 알려져있다은.

+0

Python 2.x 또는 3.x? (차이를 만들지는 모르지만 지정하는 것이 좋습니다) –

답변

3

이 그것을 할 것입니다 :

inspect.getmembers(obj.__class__, lambda x: isinstance(x, property)) 여기

은 정확히 (IPython를 사용하여) 작동 방법은 다음과 같습니다

In [29]: class Foo(object): 
    ....:  @property 
    ....:  def foo(self): return 42 
    ....:  

In [30]: obj = Foo() 

In [31]: inspect.getmembers(obj.__class__, lambda prop: isinstance(prop, property)) 
Out[31]: [('foo', <property at 0x106aec6d8>)] 

property가 정상 (새 스타일) 클래스는 정말 때문에이 작동; @property으로 표시하여 방금 property의 인스턴스를 만들고있는 것입니다. 이는 또한 클래스의 속성 인스턴스가 isinstance을 사용하여 property에 대해 유형 비교 될 수 있음을 의미합니다.

+0

dir도 사용할 수 있습니다. dir (obj. obj .__ class prop) 속성의 inspect'[isinstance (getattr (obj .__ 클래스 __, prop), 속성)를 가져올 필요가 없습니다. 감사합니다. @ Erik ** – markcial

+0

우선,'dir (obj .__ class __)'여야합니다. 그러나 IIRC, 나는'dir'이 있어야한다고 생각하지 않습니다. 실제 코드 및 디버깅/개발에 사용되지만 잘못된 것일 수 있습니다. –

+0

inspect 모듈은 인트로 스펙 션을 위해 이미 dir을 사용합니다 : S inspect.py' lines 247 to 251 – markcial

관련 문제