【发布时间】:2011-06-05 00:52:50
【问题描述】:
我支持一个 legacy python 应用程序,它有一个这样编写的类(仍在 python 2.4 中运行):
class MyClass(object):
def property(self, property_code, default):
...
现在我正在向它添加一些新代码:
def _check_ok(self):
...
ok = property(lamdba self:self._check_ok())
基本上我想在这个类中添加一个属性'ok'。
但是它不起作用。我遇到了这个错误信息:
TypeError: property() takes at least 2 arguments (1 given)
现有的类方法“property”已经盖过了内置的“property”关键字。
我有什么方法可以像在我的新代码中那样使用 'property' 吗?
重构现有的property() 函数不是一个选项。
编辑:如果我将新代码放在MyClass::property def 之前,它将起作用。但是我很想看看有没有更好的解决方案
编辑 2:这些代码在 shell 中工作
>>> class Jack(object):
... def property(self, a, b, c):
... return 2
... p = __builtins__.property(lambda self: 1)
...
>>> a = Jack()
>>> a.p
1
>>> a.property(1, 2, 3)
2
但同样的技术在我的应用程序中不起作用。得到 AttributeError: 'dict' object has no attribute 'property' 错误
【问题讨论】:
-
您使用了 builtin,当您按照 Thomas K 的建议使用 builtin 时会发生什么?
-
你不能只有
ok = property(_check_ok)吗?还是使用装饰器(_check_okdef 上方的@property)?当然,根据您的解决方案,您可能必须更全面地限定property。
标签: python