【发布时间】:2018-07-03 18:31:14
【问题描述】:
对于使用自定义属性装饰器的 Python 代码,Pylint 报告错误 E0202(方法隐藏)。我尝试使用 property-classes 选项失败了。
这里是props.py
from functools import wraps
def myproperty(func):
@wraps(func)
def fget(self):
return func(self)
return property(fget)
和testimport.py:
#!/usr/bin/python
from props import myproperty
class E0202(object):
def __init__(self):
self._attr = 'attr'
self._myattr = 'myattr'
@property
def attr(self):
return self._attr
@attr.setter
def attr(self, value):
self._attr = value
@myproperty
def myattr(self):
return self._myattr
@myattr.setter
def myattr(self, value):
self._myattr = value
def assign_values(self):
self.attr = 'value'
self.myattr = 'myvalue'
if __name__ == '__main__':
o = E0202()
print(o.attr, o.myattr)
o.assign_values()
print(o.attr, o.myattr)
使用 Python 2.7.13 运行代码会产生预期的结果:
$ python test.py
('attr', 'myattr')
('value', 'myvalue')
Pylint 1.6.5 自定义属性报错,常规属性不报错:
$ pylint -E --property-classes=props.myproperty testimport.py
No config file found, using default configuration
************* Module testimport
E: 20, 4: An attribute defined in testimport line 29 hides this method (method-hidden)
第29行是自定义属性的setter的使用:
self.myattr = 'myvalue'
pylint 的正确选择是什么?还是这是误报?
【问题讨论】:
标签: python properties pylint