Python:如何为关键字"属性"取消阴影?

Ant*_*ong 3 python

我支持一个遗留的 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'错误

Tho*_*s K 8

Python 2:

import __builtin__
__builtin__.property
Run Code Online (Sandbox Code Playgroud)

Python 3:

import builtins
builtins.property
Run Code Online (Sandbox Code Playgroud)

  • 简短版本:它是Python的一个混乱部分,因为`__builtins__`可以是dict或模块.请参阅http://stackoverflow.com/questions/1184016/why-builtins-both-module-and-dict和http://stackoverflow.com/questions/2173425/two-conflicting-meanings-of-builtins-in-python -3-蟒-3-1-蟒-3K-python30/2173457#2173457 (3认同)
  • 如果它与任何人相关:在Python 3中,你执行`import builtins`(复数,没有下划线),而不是`import __builtin__`. (3认同)