Python-属性和更新属性值
我目前正试图了解Python属性 假设我在摄氏度和开尔文之间转换。我有一个学位班,负责处理这些计算:Python-属性和更新属性值,python,properties,attributes,Python,Properties,Attributes,我目前正试图了解Python属性 假设我在摄氏度和开尔文之间转换。我有一个学位班,负责处理这些计算: class Degrees(object): def __init__(self, celsius): self.celsius = celsius #Celsius def set_celsius(self, celsius): self._celsius = celsius def get_celsius(self):
class Degrees(object):
def __init__(self, celsius):
self.celsius = celsius
#Celsius
def set_celsius(self, celsius):
self._celsius = celsius
def get_celsius(self):
return self._celsius
celsius = property(fget=get_celsius, fset=set_celsius)
#Kelvin
def set_kelvin(self, kelvin):
self._kelvin = kelvin
def get_kelvin(self):
return self._kelvin
kelvin = property(fget=get_kelvin, fset=set_kelvin)
def to_kelvin(self):
self.kelvin = self.celsius + 273.15
return self.kelvin
def to_celcius(self):
self.celsius = self.kelvin - 273.15
return self.celsius
然后,我使用以下方法:
deg = Degrees(20) #Set celsius to 20
print ("In Kelvin {0:.3f}.").format(deg.to_kelvin()) #Works
deg.kelvin = 300 #Should alter celsius
print ("New celsius {0}").format(deg.celsius)
输出:
>>>> New celsius 20
对于最后一次打印,我预计为26.850(新的摄氏度值)。相反,我得到了20(旧的)。也就是说,摄氏度值尚未更新
我怎样才能解决这个问题?非常感谢您的指点 将
设置开尔文
功能更改为-
def set_kelvin(self, kelvin):
self._kelvin = kelvin
self._celsius = self.to_celcius()
将
set_kelvin
功能更改为-
def set_kelvin(self, kelvin):
self._kelvin = kelvin
self._celsius = self.to_celcius()
将
set_kelvin
功能更改为-
def set_kelvin(self, kelvin):
self._kelvin = kelvin
self._celsius = self.to_celcius()
将
set_kelvin
功能更改为-
def set_kelvin(self, kelvin):
self._kelvin = kelvin
self._celsius = self.to_celcius()
您不应该存储两个相互依赖的独立属性。他们肯定会失去同步。相反,选择一个要存储的规范值,并来回转换。既然你是从celcius开始的,在整个过程中使用它可能是有意义的
class Degrees(object):
def __init__(self, celsius):
self._celsius = celsius
#Celsius
def set_celsius(self, celsius):
self._celsius = celsius
def get_celsius(self):
return self._celsius
celsius = property(fget=get_celsius, fset=set_celsius)
#Kelvin
def set_kelvin(self, kelvin):
self._celsius = self.to_celsius(kelvin)
def get_kelvin(self):
return self.to_kelvin(self._celsius)
kelvin = property(fget=get_kelvin, fset=set_kelvin)
def to_kelvin(self, celsius):
return celsius + 273.15
def to_celsius(self, kelvin):
return kelvin - 273.15
您不应该存储两个相互依赖的独立属性。他们肯定会失去同步。相反,选择一个要存储的规范值,并来回转换。既然你是从celcius开始的,在整个过程中使用它可能是有意义的
class Degrees(object):
def __init__(self, celsius):
self._celsius = celsius
#Celsius
def set_celsius(self, celsius):
self._celsius = celsius
def get_celsius(self):
return self._celsius
celsius = property(fget=get_celsius, fset=set_celsius)
#Kelvin
def set_kelvin(self, kelvin):
self._celsius = self.to_celsius(kelvin)
def get_kelvin(self):
return self.to_kelvin(self._celsius)
kelvin = property(fget=get_kelvin, fset=set_kelvin)
def to_kelvin(self, celsius):
return celsius + 273.15
def to_celsius(self, kelvin):
return kelvin - 273.15
您不应该存储两个相互依赖的独立属性。他们肯定会失去同步。相反,选择一个要存储的规范值,并来回转换。既然你是从celcius开始的,在整个过程中使用它可能是有意义的
class Degrees(object):
def __init__(self, celsius):
self._celsius = celsius
#Celsius
def set_celsius(self, celsius):
self._celsius = celsius
def get_celsius(self):
return self._celsius
celsius = property(fget=get_celsius, fset=set_celsius)
#Kelvin
def set_kelvin(self, kelvin):
self._celsius = self.to_celsius(kelvin)
def get_kelvin(self):
return self.to_kelvin(self._celsius)
kelvin = property(fget=get_kelvin, fset=set_kelvin)
def to_kelvin(self, celsius):
return celsius + 273.15
def to_celsius(self, kelvin):
return kelvin - 273.15
您不应该存储两个相互依赖的独立属性。他们肯定会失去同步。相反,选择一个要存储的规范值,并来回转换。既然你是从celcius开始的,在整个过程中使用它可能是有意义的
class Degrees(object):
def __init__(self, celsius):
self._celsius = celsius
#Celsius
def set_celsius(self, celsius):
self._celsius = celsius
def get_celsius(self):
return self._celsius
celsius = property(fget=get_celsius, fset=set_celsius)
#Kelvin
def set_kelvin(self, kelvin):
self._celsius = self.to_celsius(kelvin)
def get_kelvin(self):
return self.to_kelvin(self._celsius)
kelvin = property(fget=get_kelvin, fset=set_kelvin)
def to_kelvin(self, celsius):
return celsius + 273.15
def to_celsius(self, kelvin):
return kelvin - 273.15