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):

我目前正试图了解Python属性

假设我在摄氏度和开尔文之间转换。我有一个学位班,负责处理这些计算:

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