, bazı sihirli yöntemlerle desteği ile, bir Foo
sınıfını içeren bir kütüphane kurduk Say __add__()
ve __radd__()
ki: 3 + foo
hesaplanırken,Python'da genişletilebilir büyü yöntemleri için en iyi yöntemler var mı?
>>> class Foo(object):
... def __add__(self, rhs):
... print("Foo.__add__", rhs)
... def __radd__(self, lhs):
... print("Foo.__radd__", lhs)
...
>>> foo = Foo()
>>> foo + 3
Foo.__add__ 3
>>> 3 + foo
Foo.__radd__ 3
, piton ilk type(3).__add__(3, foo)
çağırır, ancak bu NotImplemented
döndürür olarak, geri düşüyor type(foo).__radd__(foo, 3)
için:
>>> type(3).__add__(3, foo)
NotImplemented
benim kütüphanenin üstünde kütüphanelerini kurmak edebilmek için geliştiriciler istiyorum, kütüphane bir sınıfiçeren demekve onların tam kontrole sahip olmasını istiyorum. Özellikle, diğer kütüphanenin foo + bar
numaralı telefonun foo.__add__(bar)
veya bar.__radd__(foo)
'u aramasına karar vermesine izin veren bazı mekanizmalar uygulamak istiyorum.
Bu NumPy'nin bunu __array_priority__
şemasını kullanarak çözdüğünü görüyorum. Ancak bu bazı baş ağrılarına neden oluyor gibi görünüyor (bu konuyla ilgili soru ve sorunların sayısı göz önünde bulundurularak). Başka en iyi uygulamalar var mı?
Bunun da mevcut sınıflarla çalışmasını istiyor musunuz? –
Sorunuz oldukça ilginç olmasına rağmen, ayrıntılardan yoksundur. İstenilen davranışların farklı yönlerini çözebilir misiniz? –