제 질문은 this one과 다소 비슷합니다. 그것은 모듈 내용보다는 객체 방법에 관한 것이다. inspect
모듈을 사용하여 클래스가 정의 된 메서드를 가져올 수 있는지 알고 싶습니다. 부모 클래스가 아니라에 대한 질문입니다.Python - 메서드가 정의 된 클래스를 쿼리하려면 어떻게해야합니까?
내 자식 클래스가 더 높은 수준의 추상화 수준에서 부모 메서드에 액세스하는 '매크로'메서드를 정의하고 모든 하위 수준 메서드에 대해 걱정할 필요가 없기 때문에이 메서드가 필요합니다. 상속 나무를 올리십시오. 여기
은 간단한 예입니다 :class Foo(object):
def __init__(self): pass
def f1(self): return 3
def f2(self): return 1
class Bar(Foo):
def __init__(self): Foo.__init__(self)
def g1(self): return self.f1() + self.f2()
def g2(self): return self.f1() - self.f2()
import inspect
inspect.getmembers(Bar, inspect.ismethod)
출력 :
[('__init__', <unbound method Bar.__init__>),
('f1', <unbound method Bar.f1>),
('f2', <unbound method Bar.f2>),
('g1', <unbound method Bar.g1>),
('g2', <unbound method Bar.g2>)]
그녀는 이제까지에 관심이있을 것 때문에
사용자가 알거나 f
의의 존재에 대해 관심이 필요 g
s. (물론 이러한 결과는 대부분의 컨텍스트에서 의미가 있습니다. 인스턴스화 될 때 이러한 모든 메서드가 개체에 바인딩되기 때문입니다.) 긴 상속 트리의 경우 반환 된 목록은 매우 길어지고 사용자와 관련이 없습니다.
f1
및 f2
을 어떻게 제거 할 수 있습니까? 클래스에 정의 된 메소드에 대해 __module__
속성에 해당하는 것이 있습니까? 더 나은 방법은 인스턴스 메서드를 사용하여 동일한 작업을 수행 할 수 있습니까?
바운드 메소드 ('Bar'의 인스턴스)에서'im_class'를 요구하는 것이 작동하지 않습니다. 또한 바인딩되지 않은 메서드에서도 작동하지 않습니다. –
'object.hasOwnPro ...'안돼, 그게 옳지 않아. (죄송 합니다만, JavaScript가 Python보다 더 쉽게 할 수 있다는 것을 믿을 수 없었습니다.) – kojiro