继承嵌套类成员的Pylint警告

时间:2014-08-11 14:14:12

标签: python inheritance subclass inner-classes pylint

我们将某些特定功能实现为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 :(得分:0)

这似乎过于复杂的IMO。使用dict for config可以很好地完成。 E,G:

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'