Erstellen von Eigenschaften mittels getter-und setter-lambda
Ich habe so etwas wie dieses:
class X():
def __init__(self):
self.__name = None
def _process_value(self, value):
# do something
pass
def get_name(self):
return self.__name
def set_name(self, value):
self.__name = self._process_value(value)
name = property(get_name, set_name)
Kann ich ersetzen get_name
und set_name
Verwendung von lambda-Funktionen?
Habe ich versucht, dieses:
name = property(lambda self: self.__name, lambda self, value: self.__name = self.process_value(value))
aber der compiler gar nicht, wie mein Set-Funktion.
- Was ist "smth"?
- Wahrscheinlich 'etwas.'
- Es scheint, wie Sie versuchen, die Eigenschaft Definitionen zu verschleiern. Was ist der Punkt zu ersetzen einfache Funktionen mit Lambda-Ausdrücke?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem ist, dass lambda-Stelle muss ein Ausdruck sein, und die Zuweisung ist eine Anweisung (eine starke, tief Unterscheidung in Python). Wenn Sie darauf bestehen Begehen
lambda
s treffen Sie viele solcher Fälle und lernen Sie die workarounds (es gibt meist eine, wenn auch nicht immer), wie in diesem Fall:D. H. die Nutzung der built-in
setattr
(was ist eine Funktion und somit akzeptabel in einerlambda
's Körper) eher als Zuordnung (was ist eine Aussage und somit nicht in einelambda
's Körper).Bearbeiten: auch Sie brauchen, um das name-mangling für die dual-Unterstrich-Attribut manuell (ändern
__name
zu_X__name
wie Sie in der Klasse X), wobei das Attribut name wird als eine Zeichenfolge in Anführungszeichen, wie es sein muß in setattr, als die Pyhon-compiler tut nur das name mangling in Frage für geeignete Identifikatoren, nicht für string-Literale.Wenn Sie den ausbau eines
list
können Sie auch__setitem__
wie diese: