将@property方法添加到类中

时间:2014-11-20 15:34:35

标签: python oop syntactic-sugar

可以使用以下命令向python类添加方法:

class foo(object):
    pass

def donothing(self):
    pass

foo.y = donothing

然后人们会用以下方法调用该方法:

f = foo()
f.y()

是否可以将@property添加到def,以便通过

进行调用
f.y

3 个答案:

答案 0 :(得分:4)

指定property的返回值:

>>> class foo(object):
...     pass
...
>>> def donothing(self):
...     print('donothing is called')
...
>>> foo.y = property(donothing)  # <----
>>> f = foo()
>>> f.y
donothing is called

答案 1 :(得分:1)

您只需在方法定义

之前添加@property即可
... class Foo(object):
...    pass
...
>>> @property
... def bar(self):
...     print("bar is called")
... 
>>> Foo.bar = bar
>>> f = Foo()
>>> f.bar
bar is called

答案 2 :(得分:0)

当然,可以指定为:

class foo(object):
    def __int__(self):
        self._y = None

    @property
    def y(self):
        return self._y

    @y.setter
    def y(self, value):
        self._y = value



>>>>x = foo()
>>>>x.y = str
>>>>print type(x.y(12.345)), x.y(12.345)
<type 'str'> 12.345

在这里,我只是说属性 y (是属性而不是方法!)设置为。由于一切都是Python中的对象,我可以完美地为变量赋值。与属性 y (作为属性)相关联的方法返回属性的值,该属性变为函数(在本例中为 str )。返回的值用作可调用的,这正是我们所期望的。但是,访问属性 y 会以可调用方式返回,有效地调用 str()

我可以将任何功能分配给 y ,如下所示:

def double(x):
    return 2 * x

...

>>>>x.y = double
>>>>print x.y(33)
66

等等......