这个问题源于我昨天的问题(Value [dict object] doesn't support membership test),其中使用
pylint
和python2.7
无法识别对象是可迭代的。
我将从上面的帖子中复制并粘贴代码:
file.py
import attr
from base import BaseClass
@attr.s
class MyClass(BaseClass):
def set_ids(self, args):
if id not in self.daily.obj_dict:
# do some stuff
print("testing")
base.py
:
from abc import ABCMeta, abstractmethod
from six import with_metaclass
from daily import Daily
class BaseClass(with_metaclass(ABCMeta, object)):
@abstractmethod
def set_ids(self, args):
pass
def process(self, vals, ids):
obj_dict = {
id: vals[id]
for id in ids
}
self.daily = Daily(obj_dict)
daily.py
:
import attr
from builtins import object
@attr.s(frozen=True)
class Daily(object):
obj_dict = attr.ib(default=None)
python2.7 -m pylint file.py
产生错误
E: 8,17: Value 'self.daily.obj_dict' doesn't support membership test (unsupported-membership-test)
我需要弄清楚如何消除这个错误,我想我可以以某种方式告诉 linter 它是
dict
或可迭代类型。我怎么能在python2.7
中做到这一点?
要让 pylint 知道不可变对象是可迭代类型,可以使用称为类型提示的特殊注释。类型提示是一种指定变量或函数参数的预期类型的方法,它有助于 pylint 执行更准确的类型检查。
在这种情况下,可以使用Python中的“typing”模块指定不可变对象为可迭代对象。这是一个例子: 从输入 import Iterable
from typing import Iterable
# Define your immutable object
my_tuple = (1, 2, 3)
# Use a type hint to specify that it's an iterable
def process_items(items: Iterable):
for item in items:
# Do something with each item
print(item)
在此示例中,我们使用“typing.Iterable”类型提示来指定“items”参数应为可迭代类型,例如列表、元组或集合。这允许 pylint 执行更准确的类型检查并捕获任何潜在的错误。
请注意,类型提示是可选的,不会影响代码的运行时行为。它们只是一种向您的编辑器或 linter 提供额外信息以帮助您发现潜在错误的方法。