可以使用以下命令向python类添加方法:
class foo(object):
pass
def donothing(self):
pass
foo.y = donothing
然后人们会用以下方法调用该方法:
f = foo()
f.y()
是否可以将@property
添加到def
,以便通过
f.y
答案 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
等等......