44 votes

Comment trouver l'instance d'une méthode liée en Python ?

>>> class A(object):  
...         def some(self):  
...                 pass  
...  
>>> a=A()  
>>> a.some  
<bound method A.some of <__main__.A object at 0x7f0d6fb9c090>>

C'est-à-dire que je dois avoir accès à "a" après avoir reçu seulement "a.some".

52voto

SilentGhost Points 79627

À partir de python 2.6, vous pouvez utiliser un attribut spécial __self__ :

>>> a.some.__self__ is a
True

im_self est supprimé dans py3k.

Pour plus de détails, voir le inspect dans la bibliothèque standard de Python.

8voto

MattH Points 15352
>>> class A(object):
...   def some(self):
...     pass
...
>>> a = A()
>>> a
<__main__.A object at 0x7fa9b965f410>
>>> a.some
<bound method A.some of <__main__.A object at 0x7fa9b965f410>>
>>> dir(a.some)
['__call__', '__class__', '__cmp__', '__delattr__', '__doc__', '__format__', '__func__', '__get__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'im_class', 'im_func', 'im_self']
>>> a.some.im_self
<__main__.A object at 0x7fa9b965f410>

3voto

gruszczy Points 14097

Essayez le code suivant et voyez si cela vous aide :

a.some.im_self

3voto

user225312 Points 22699

Tu veux quelque chose comme ça, je suppose :

>>> a = A()
>>> m = a.some
>>> another_obj = m.im_self
>>> another_obj
<__main__.A object at 0x0000000002818320>

im_self est l'objet d'instance de la classe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X