我在Pylint遇到了以下问题:
给出以下最小例子:
#tpack/__init__.py
class C:
@property
def ans(self):
return 42
def f(c):
return C.ans.fget(c)
Pylint产生以下错误:
>pylint -d missing-docstring -d invalid-name -d too-few-public-methods tpack
************* Module tpack
tpack\__init__.py:7:11: E1101: Method 'ans' has no 'fget' member (no-member)
------------------------------------------------------------------
Your code has been rated at 0.00/10 (previous run: 0.00/10, +0.00)
Pylint版本:
>pylint --version
pylint 2.1.1
astroid 2.0.4
Python 3.6.4 |Anaconda custom (64-bit)| (default, Jan 16 2018, 10:22:32) [MSC v.1900 64 bit (AMD64)]
这是Pylint的已知问题吗?
关于使用这段代码似乎有些混乱。
这是一个例子:
>python
Python 3.6.4 |Anaconda custom (64-bit)| (default, Jan 16 2018, 10:22:32) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from tpack import *
>>> c = C()
>>> f(c)
42
通过类访问属性时,获取装饰器生成的实际属性对象。通过这个可以访问属性对象的成员函数。 fgets
是吸气剂。只需将C
类型的对象传递给它,然后返回该属性。
我担心Pylint就在这里,但这个消息有点误导。
所以你的C
类有一个名为ans
的属性,而ans
定义接受self
作为参数;之后你用C
调用C.ans
类本身但是在类的上下文中,Python应该作为self
的ans
参数传递给什么?
所以问题是self
没有在类的上下文中设置,所以你只能从C
的实例访问属性,而不能从C
类本身访问。