继承的嵌套类成员上的Pylint警告

3 投票
1 回答
1199 浏览
提问于 2025-04-18 16:50

我们有一些特定的功能是用Python类来实现的,这样我们的开发者可以很方便地进行扩展。每个类里面都有一个叫做Config的内部类,里面有一系列的项目。基础类的Config类是空的,而每个继承这个基础类的子类都会在里面定义一些项目。可是,每当使用Config子类的项目时,pylint就会发出警告。

比如,这段代码:

class A(object):

  class Config(object):

    def __init__(self):
      self.item1 = 1
      self.item2 = 2

  def __init__(self):
    self._config = self.Config()


class B(A):

  class Config(A.Config):

    def __init__(self):
      super(B.Config, self).__init__()
      self.item3 = 3
      self.item4 = 4

  def do_something(self):
    if self._config.item3 == 3:
      print 'hello'
    if self._config.item1 == 5:
      print 'bye'

然后你可以这样使用它:

>>> B().do_something()
hello

我们的程序在这个思路下运行得很好。但问题是,每次我们使用这些项目时,pylint还是会继续发出警告。例如,在这种情况下,它会说:

E1101(no-member) Instance of 'Config' has no 'item3' member

所以我想问的是,如何在不关闭这些警告的情况下避免pylint的提示?有没有更好的方法来实现我想要的功能?请注意,在实际程序中,配置值是根据用户数据而变化的,而不是一堆常量。

非常感谢。

1 个回答

0

我觉得这个看起来有点复杂。其实用字典来做配置就很好了。例如:

class A(object):

  def __init__(self):
    self._config = {
        'item1': 1,
        'item2': 2,
    }


class B(A):

  def __init__(self):
      super(B, self).__init__()
      self._config.update({
          'item3': 3,
          'item4': 4,
      })

  def do_something(self):
    if self._config['item3'] == 3:
      print 'hello'
    if self._config['item1'] == 5:
      print 'bye'

撰写回答