Python'da, hem sınıf işlevi hem de örnek yöntemi olarak davranan, ancak davranışları değiştirme becerisine sahip bir işlev oluşturmak istiyorum. Bunun kullanım durumu, bir dizi serileştirilebilir nesne ve tip içindir. Örnek olarak:Eşzamanlı olarak bir örnek ve sınıf yöntemi olan bir yöntem oluşturma
>>> class Thing(object):
#...
>>> Thing.to_json()
'A'
>>> Thing().to_json()
'B'
Ben bir C modülü ile basit olacak gibi Python kaynağındaki funcobject.c içinde classmethod tanımı() göz önüne alındığında, bu görünüyor biliyoruz. Bunu python içinden yapmanın bir yolu var mı?
Teşekkürler! tanımlayıcıların ipucu ile
, Aşağıdaki kod ile bunu başardı:class combomethod(object):
def __init__(self, method):
self.method = method
def __get__(self, obj=None, objtype=None):
@functools.wraps(self.method)
def _wrapper(*args, **kwargs):
if obj is not None:
return self.method(obj, *args, **kwargs)
else:
return self.method(objtype, *args, **kwargs)
return _wrapper
Alex ederiz!
Neden * type * serileştirmesi gerekiyor? –
birçok nedeni vardır. Benim sorunumda, türün serileştirilmesi bir RPC sistemindeki özellikleri oluşturmamızı sağlar. –