【问题标题】:Python property being overwrittenPython 属性被覆盖
【发布时间】:2013-01-19 20:30:41
【问题描述】:

所以我有以下代码,我正在尝试将某种元数据添加到类的属性中。我的想法是我会有一个 getter/setter,其中 getter 将返回一个 float/int/string 私有变量,但会返回一些额外的数据,例如详细的名称。

这在我使用 setter 之前非常有效,一旦使用似乎忽略了 setter 和 getter。

有谁知道为什么我正在做的事情不起作用?或者是否有更好的方法来完成我想做的事情?

非常感谢!

class Param(float):
    def __new__(self,name,value):
        return float.__new__(self,value)

    def __init__(self,name,value):
        self.__name = name

    name = property(lambda self: self.__name)


class Beer:
    def __init__(self, temp):
        self.__T = temp

    @property
    def temp(self):
        return Param('Beer Temperature', self.__T)

    @temp.setter
    def temp(self,value):
        self.__T = float(value) 


print b.temp.name, b.temp.__class__

print b.temp * 4.5

print b.temp.name, b.temp.__class__

b.temp = 101

print b.temp.name, b.temp.__class__

【问题讨论】:

    标签: python properties metadata setter getter


    【解决方案1】:

    在 python 2 中,属性仅适用于 new-style classes(派生自 object):

    class Beer(object):
        def __init__(self, temp):
            self.__T = temp
    
        @property
        def temp(self):
            return Param('Beer Temperature', self.__T)
    
        @temp.setter
        def temp(self,value):
            self.__T = float(value) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多