我遇到了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)
Pintint版本:
>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
的对象传递给它,然后返回该属性。
答案 0 :(得分:0)
恐怕Pylint就在这里,但信息有点误导。
因此,您的C
类具有一个名为ans
的属性,并且ans
的定义收到self
作为参数;稍后您用C
调用C.ans
类本身,但是在该类的上下文中,应该将Python作为self
的{{1}}参数传递给什么?
所以问题是ans
不在类的上下文中设置,因此您只能从self
的实例访问属性,而不能从C
类本身访问属性。
答案 1 :(得分:0)