Python属性被覆盖

时间:2013-02-05 01:18:53

标签: python properties metadata setter getter

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

在我使用setter之前,这种方式非常有效,曾经使用的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__

1 个答案:

答案 0 :(得分: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)