W Pythonie mogę przeciążyć metodę obiektu __add__
(lub inne podwójne podkreślenie, inaczej metody "dunder"). To pozwala mi zdefiniować niestandardowe zachowanie dla moich obiektów podczas korzystania z operatorów Pythona.Wiem, czy + lub __add__ wywołał obiekt
Czy można dowiedzieć się, z metody dunder, czy metoda została wywołana przez +
lub przez __add__
?
Na przykład, załóżmy, że chcę stworzyć przedmiot, który drukuje "+"
lub "__add__"
zależności czy +
użyto czy __add__
nazwano bezpośrednio.
class MyAdder(object):
def __add__(self, other):
print method_how_created()
return 0
MyAdder() + 7
# prints "+", returns 0
MyAdder().__add__(7)
# prints "__add__", returns 0
zakazu istnienia jakiejś magii jak method_how_created
, czy istnieje kanoniczny odwzorowanie symboli Dunder metod? Wiem, że istnieją listy, takie jak http://www.python-course.eu/python3_magic_methods.php lub rozwiązania oparte na analizie docletów modułu operator
, jak wspomniano tutaj: Access operator functions by symbol. Czy istnieje sposób na znalezienie mapy między nazwami funkcji i symbolami, która jest trochę mniej odstręczająca niż analiza docstrukcji lub ręczne tworzenie listy?
Dlaczego miałbyś chcieć czegoś takiego? – wnnmaw
Proszę mnie poprawić, jeśli się mylę, ale czy '+' nie wystarczy zadzwonić '__add__'? –
@ OrangeFlash81 to robi. A w przypadku 'NotImplemented' wywołania' __radd__' – Bharel