如何让pylint知道不可变对象是可迭代类型?

问题描述 投票:0回答:1

这个问题源于我昨天的问题(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
中做到这一点?

python python-2.7 pylint iterable
1个回答
-2
投票

要让 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 提供额外信息以帮助您发现潜在错误的方法。

© www.soinside.com 2019 - 2024. All rights reserved.