继承嵌套类成员的Pylint警告

3
我们实现了一些特定的功能作为Python类,以便我们的开发人员继承它并轻松扩展它。每个类都有一个内部Config类,其中包含一个项目列表。base类有一个空的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

我们的程序采用相同的思路运行良好。问题在于每次使用items时,pylint都会持续报错。例如,在这种情况下它会说:
E1101(no-member) Instance of 'Config' has no 'item3' member

我的问题是如何避免这些pylint警告,而不必禁用它们?有没有更好的方法来实现我想要的效果?请注意,在真实的程序中,配置值会根据用户数据而变化,并不是一堆常量。
非常感谢。

1
不回答你的问题,但这似乎是一种复杂的继承配置的方式。 - Joel Cornett
1
我想避免编程错误,所以访问值时使用具体名称而不是随机字符串。这就是我这样做的原因。此外,Config具有一些关联功能。我在这里编写了继承对象的Config,但在我的代码中,它继承自带有一些方法的Config对象。 - cserpell
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'

1
我想避免编程错误,所以访问值时使用具体名称而不是随机字符串。这就是我这样做的原因。此外,Config具有一些相关功能。我在这里编写了继承对象的Config,但在我的代码中它继承自带有一些方法的Config对象。 - cserpell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接