próbuję zdefiniować kilka metod klasy przy użyciu innej metody klasy bardziej ogólny sposób następujący:functools.partial na metody klasy
class RGB(object):
def __init__(self, red, blue, green):
super(RGB, self).__init__()
self._red = red
self._blue = blue
self._green = green
def _color(self, type):
return getattr(self, type)
red = functools.partial(_color, type='_red')
blue = functools.partial(_color, type='_blue')
green = functools.partial(_color, type='_green')
Ale gdy próbuję wywołać żadnej z tych metod uzyskać:
rgb = RGB(100, 192, 240)
print rgb.red()
TypeError: _color() takes exactly 2 arguments (1 given)
Domyślam się, że self nie jest przekazywane do _color
od rgb.red(rgb)
działa.
Rozumiem. Dzięki. – Arjor
Co z 'self.red = functools.partial (RGB._color, self, 'red')' w '__init__'? Jest kompatybilny z Python2. – dashesy
@dashesy: jasne, ale powoduje to umieszczenie tych obiektów na każdej instancji (koszt pamięci), co również utrudnia zastąpienie ich przez podklasę. –