http://www.programiz.com/python-programming/property Im Anschluss an, ich bin mit dem folgende Verfahren zur Herstellung eine Immobilie in Python Implementierung vertraut:eine Eigenschaft Implementierung des Doppelstern mit (**)
class Celsius(object):
def __init__(self, temperature = 0):
self._temperature = temperature
def get_temperature(self):
print("Getting value")
return self._temperature
def set_temperature(self, value):
if value < -273:
raise ValueError("Temperature below -273 is not possible")
print("Setting value")
self._temperature = value
temperature = property(get_temperature, set_temperature)
I, in denen einige Code jetzt bin Lesen des Doppel asterisk (**
) wird zum Definieren der Eigenschaft verwendet. Wenn ich es zu meinem eigenen Beispiel anpassen, so scheint es so zu sein:
class Celsius(object):
def __init__(self, temperature = 0):
self._temperature = temperature
def temperature():
def fget(self):
print("Getting value")
return self._temperature
def fset(self, value):
if value < -273:
raise ValueError("Temperature below -273 is not possible")
print("Setting value")
self._temperature = value
temperature = property(**temperature())
Allerdings, wenn ich versuche, diesen Code auszuführen und eine Klasse durch c = Celsius()
instanziiert, bekomme ich
TypeError: type object argument after ** must be a mapping, not NoneType
Ich verstehe dass fget
und fset
sind Schlüsselwortargumente von property
, so würde ich erwarten, was aus **temperature()
herauskommt, um etwas wie fget=fget, fset=fset
zu sein, aber ich bin nicht sicher, was hier falsch geht oder wie man es weiter seziert. Irgendwelche Ideen?
Nichts kommt aus 'temperature()' heraus. Es gibt keine Rückkehr. Sie definieren 'fget' und' fset' als lokale Funktionen innerhalb 'temperature', aber sie kommen nicht" heraus ", wenn Sie sie nicht zurückgeben. – deceze