我支持一个遗留的 python应用程序,它有一个这样编写的类(仍然在python 2.4中运行):
class MyClass(object):
def property(self, property_code, default):
...
Run Code Online (Sandbox Code Playgroud)
现在我要添加一些新代码:
def _check_ok(self):
...
ok = property(lamdba self:self._check_ok())
Run Code Online (Sandbox Code Playgroud)
基本上我想为这个类添加一个属性'ok'.
但它不起作用.我遇到此错误消息:
TypeError: property() takes at least 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
现有的类方法'property'掩盖了内置的'property'关键字.
有没有什么方法可以像我的新代码一样使用'property'?
重构现有property()功能不是一种选择.
编辑:如果我把新代码放在MyClass::propertydef 之前,它会工作.但我真的想看看是否有更好的解决方案
编辑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
Run Code Online (Sandbox Code Playgroud)
但是同样的技术在我的应用程序中不起作用.Got AttributeError:'dict'对象没有属性'property'错误
Python 2:
import __builtin__
__builtin__.property
Run Code Online (Sandbox Code Playgroud)
Python 3:
import builtins
builtins.property
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
920 次 |
| 最近记录: |