2014-07-19 2 views
0

어떻게이 개체는 함수로 전달 된함수로 전달 된 인스턴스의 함수 특성을 추출하는 방법은 무엇입니까?

<bound method SimpleSubscriber.process of <__main__.SimpleSubscriber object at 0x2ede150>> 

? 다음과 같은 방법 개체에서 "SimpleSubscriber 객체의 속성을 추출하지만, 우리가 위. 나는 것 볼 수있는 인스턴스의 함수 수 ..이 기능이있는 인스턴스에서 (자사가 소유하고있는 것 이외의 다른 클래스의 목록에 저장) 상기 목적을 참조 할 좋아

dir()의 어떠한 도움이 보인다 인스턴스 내에서

self은 반환

<__main__.SimpleSubscriber object at 0x2ede150> 

그래서이 경우는 다른 클래스 내에서, 자신의 방식으로 자신을 참조 할 수 없습니다.

그러니까 기본적으로

, 나는 내가 인스턴스의 고유 식별자를 추출하기 위해 노력하고있어

<bound method SimpleSubscriber.process of <__main__.SimpleSubscriber object at 0x2ede150>> 

에서

<__main__.SimpleSubscriber object at 0x2ede150> 

의 속성에 액세스를 시도하고있다. 그게 가능하니?

답변

0

바운드 메서드는 원래 함수와 그것이 바인딩 된 인스턴스에 대한 참조를 유지합니다. 이것은 메소드가 호출 될 때 첫 번째 인수로 인스턴스에서 전달하는 방법입니다.

>>> class Foo: 
...  def bar(self): 
...   pass 
... 
>>> bound_bar = Foo().bar 
>>> bound_bar 
<bound method Foo.bar of <__main__.Foo object at 0x101e5f6d8>> 
>>> bound_bar.__self__ 
<__main__.Foo object at 0x101e5f6d8> 

당신은 다음 해당 인스턴스에 필요한 모든 속성에 액세스 할 수 있습니다, 다시 방법 자체를 포함 :

>>> bound_bar.__self__.bar 
<bound method Foo.bar of <__main__.Foo object at 0x101e5f6d8>> 
당신이 바인딩 된 인스턴스에 액세스하고 싶었다면

__self__ 속성을 사용 이와 같은

속성은 Datamodel reference에 설명하지만, 빠른 개요 inspect module has a handy table에 있습니다.

+0

Martijn. 나는 그 질문이 이해하기 어려울 것이라고 걱정했지만, 당신은 내가 찾고 있었던 해결책을 이해하고 정확히 알려 주었다! 고맙습니다. \ _ \ _ self \ _ \ _는 (는) 해당 기능의 디렉토리에 없습니다. 왜 그런지 알아? 내가 간과 해선 명백한 무엇인가? –

+0

@hellome :'dir()'은 * 철저한 목록이 아닙니다; [문서] (https://docs.python.org/3/library/functions.html#dir)에 다음과 같이 쓰여 있습니다 : * 완성 된 정보가 아닌 관련성이 가장 높은 정보를 생성하려고 시도합니다. * 엄격하게 또는 일관되게 정의 된 이름 집합을 제공하려고 시도하는 것보다 더 흥미로운 이름 집합을 제공합니다 *. –

+0

@hellome :'__self__' **는 최소한 Python 3.4에서 메소드 객체의 속성으로 나열됩니다. dir (bound_bar)의''__self__ '는 참입니다. –

관련 문제