2013-02-05 86 views
0

所以我有下面的代码,我想添加一些元数据,我想对一个类的属性。我的想法是,我会有一个getter/setter,其中getter会返回一个float/int/string私有变量,但会返回一些额外的数据,例如详细名称。Python属性被覆盖

这个工作完美,直到我使用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__ 

回答

5

在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) 
+0

啊,含蓄......现在完美的作品,谢谢! – dblanky