在抽象类中使用子方法可以吗? PEP8 说实例没有成员



我在Visual Studio代码中使用pep8,我只是尝试编写一些抽象类。

问题是我[pylint] E1101:Instance of 'MyAbstract' has no 'child_method' member得到错误,因为 pep8 没有意识到该方法定义得很好,而是在子类中。

为了说明我的问题,这里有一个代码片段,为了清楚起见,它被简化到最低限度:

class MyAbstract:
def some_method(self):
newinfo = self.child_method()
# use newinfo 
class MyChild(MyAbstract):
def child_method(self):
# Do something in a way
class OtherChild(MyAbstract):
def child_method(self):
# Do the same thing in a different way

所以我的问题是:

  • 这样写类可以吗?
  • 您将如何解决错误?(禁用错误,使用其他模式,...

澄清

MyAbstract 类不应实例化,子类将继承some_method。这个想法是在子类实例上使用它。

如果你想MyAbstract是一个抽象类,抽象方法child_method,Python有一种方法可以在abc模块中表达:

import abc
class MyAbstract(metaclass=abc.ABCMeta):
@abc.abstractmethod
def child_method(self):
pass
def some_method(self):
newinfo = self.child_method()
do_whatever_with(newinfo)

您的 linter 将不再抱怨不存在的方法,作为奖励,Python 将检测使用未实现的抽象方法实例化类的尝试。

最新更新