我做了一个像这样的装饰
def constant(f):
def fset(self, value):
raise TypeError
@wraps(f)
def fget(self):
return f()
return property(fget, fset)
但是当我在一个函数上使用它并调用它时,我会因为没有传递足够的参数而抛出一个类型错误,我以为添加wrapps decorator可以解决这个问题,但事实并非如此
^{pr2}$下面是我如何测试它的,我不明白我做错了什么,主要是为什么self没有被自动传入,因为包装。我可能误解了wrapps的可怕之处。在
>>> from irrigationservice.irrigation import IrrigationAmount
>>> a = IrrigationAmount(0.12, 0.2)
>>> a.calculate()
>>> a.value
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/krishna/Documents/irrigationwebserver/webserver/irrigationservice/utils.py", line 12, in fget
return f()
TypeError: value() takes exactly 1 argument (0 given)
我想您应该用这样的方法替换常量函数定义和@constant修饰符:
编辑:添加以下示例以解决一些注释
创建文件我的值.py... 在
^{pr2}$现在在python中运行:
虽然Steve's answer是正确的方法(当
@property
自然为只读时,您不需要特殊的@constant
修饰符,除非您显式地用@propname.setter
修饰其他方法),但出现问题的原因是修饰类方法没有绑定,并且没有显式地将self
传递给它。在将代码更改为:
所以
self
参数实际上去了它应该去的地方。在相关问题 更多 >
编程相关推荐