【问题标题】:Pylint: How to specify a self-defined property decorator with property-classes?Pylint:如何使用属性类指定自定义属性装饰器?
【发布时间】: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


    【解决方案1】:

    不确定我是否遇到了与您相同的问题,因为我收到了 no-member 错误。

    我使用的装饰器名为@memoized_property,我可以通过将其添加到我的 pylintrc 来解决问题:

    init-hook="import astroid.bases; astroid.bases.POSSIBLE_PROPERTIES.add('memoized_property')"
    

    (您也可以将其作为参数传递给 pylint:--init-hook="import astroid.bases; astroid.bases.POSSIBLE_PROPERTIES.add('memoized_property')")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 2011-07-11
      • 2018-11-21
      • 2013-04-10
      • 1970-01-01
      • 2020-04-09
      • 2018-10-25
      相关资源
      最近更新 更多