Zoh*_*eir 7 python properties pycharm python-3.x python-decorators
让我们考虑以下示例类:
class Foo:
def __init__(self):
self._bar = None
@property
def bar(self):
if self._bar is None:
self._bar = ... # a long computation
return self._bar
Run Code Online (Sandbox Code Playgroud)
我创建了一个cachedproperty装饰器来隐式地将计算结果存储为类实例的成员。这是此类装饰器类的简化示例:
class cachedproperty(property):
def __init__(self, fget):
@functools.wraps(fget)
def cfget(obj):
name = '_' + fget.__name__
if not hasattr(obj, name):
setattr(obj, name, fget(obj))
return getattr(obj, name)
super().__init__(cfget)
Run Code Online (Sandbox Code Playgroud)
现在类Foo看起来像这样:
class Foo:
@cachedproperty
def bar(self):
return ... # a long computation
Run Code Online (Sandbox Code Playgroud)
即使它有效,但 PyCharm 现在无法将其bar视为 的属性Foo,而是将其视为方法,这有点不方便。例如,这可以在自动完成下拉菜单中看到:
我的问题是:如何强制 PyCharm 将我的自定义属性装饰器视为实际属性?