mam co jest zasadniczo następujące w Pythonie:Częściowo Ocenianie Pythona classmethod podstawie gdzie jest dostępny z
class X(object): pass
class Y(object):
@classmethod
def method(cls, x_inst, *args, **kwargs):
#do some work here that requires an instance of x
pass
Co chciałbym zrobić to dodać właściwość dynamiczną do wszystkich wystąpień X
umożliwiających dojazd do Y
który domyślnie wypełnia pierwszy parametr z method
z podaną instancją. Np chciałbym następujący kod do pracy identycznie:
# current
x = X()
result = Y.method(x, 1, 2, 3)
# desired
x = X()
x.Y.method(1, 2, 3)
Istnieje kilka metod na kilka podklas, które chciałbym zaimplementować to zachowanie za. To, co zrobiłem obecnie, to stworzyć klasę YProxy
, którą faktycznie zwraca X
, a następnie umieścić w niej część kodu. Wydaje się raczej nieeleganckie i trudne do utrzymania jednakże:
class X(object):
@property
def Y(self):
return YProxy(self)
class Y(object):
@classmethod
def method(cls, x_inst, *args, **kwargs):
#do some work here that requires an instance of x
pass
class YProxy(object):
def __init__(self, x_inst):
self.x_inst = x_inst
def method(self, *args, **kwargs):
return Y.method(self.x_inst, *args, **kwargs)
Czy istnieje jakiś sposób, aby warunkowo częściowo ocenić classmethods na obiekcie?
W 'x(). Y.foo' będzie 'foo' zawsze metoda klasy "Y", która musi mieć swój pierwszy argument Nt wypełniony? A może chcesz mieć dostęp do dowolnych atrybutów 'Y' z instancji' X'? –
@benw będą metody na Y, które nie powinny mieć x_inst jako pierwszego parametru, choć obecnie są to wszystkie metody instancji, a nie metody klasy. –