【发布时间】:2018-09-25 16:30:33
【问题描述】:
我在使用 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 类型的对象传递给它,然后返回该属性。
【问题讨论】:
-
我不这么认为。属性在类上下文中没有意义,只有在实例上下文中才有意义。
-
如果我没记错的话,你必须为属性设置 getter 和 setter,但我可能错了
-
@E.Serra 他的属性定义很好,在这种情况下,装饰器将属性一个标准的 getter。问题是他试图在类的上下文中使用一个属性,这是没有意义的。这是因为属性接收 self 作为参数,并且没有为 C 类本身设置 self,仅针对 C 的实例。
-
好点没注意到他在给班级打电话
-
请在问题的编辑部分和@Mono 的答案中参考此代码的示例用法。