Spero che qualcuno può rispondere a questa che ha una buona comprensione profonda di Python :)metodi speciali imperative su un'istanza
Si consideri il seguente codice:
>>> class A(object):
... pass
...
>>> def __repr__(self):
... return "A"
...
>>> from types import MethodType
>>> a = A()
>>> a
<__main__.A object at 0x00AC6990>
>>> repr(a)
'<__main__.A object at 0x00AC6990>'
>>> setattr(a, "__repr__", MethodType(__repr__, a, a.__class__))
>>> a
<__main__.A object at 0x00AC6990>
>>> repr(a)
'<__main__.A object at 0x00AC6990>'
>>>
Si noti come repr (a) non cede il risultato atteso di "A"? Voglio sapere perché questo è il caso e se c'è un modo per raggiungere questo obiettivo ...
ho contrasto, il seguente esempio funziona comunque (Forse perché non stiamo cercando di eseguire l'override un metodo speciale?):
>>> class A(object):
... def foo(self):
... return "foo"
...
>>> def bar(self):
... return "bar"
...
>>> from types import MethodType
>>> a = A()
>>> a.foo()
'foo'
>>> setattr(a, "foo", MethodType(bar, a, a.__class__))
>>> a.foo()
'bar'
>>>
Probabilmente otterrai una risposta molto più illuminante se dici quello che stai cercando di ottenere. – mattmanser
Per le classi di nuovo stile, i metodi speciali vengono cercati sulla classe piuttosto che sull'istanza. Vedere la mia risposta di seguito per ulteriori dettagli e per alcuni soluzioni alternative. –
Non saprei descrivere cosa voglio fare in dettaglio. Scusate. Ma in breve, sto cercando di modellare un prototipo di modello OO in cui posso fare operatori come: World = Object(). Clone(). Mixin (World); Dove World è una classe con una raccolta di metodi che sovrascrivono/sostituiscono uno nell'istanza Object.clone(). –