在抽象类中使用children方法可以吗?pep8说实例没有memb

2024-09-29 01:26:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我在visualstudio代码中使用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。我们的想法是在子类实例上使用它。在


Tags: 代码inselfchilddef错误some子类
1条回答
网友
1楼 · 发布于 2024-09-29 01:26:03

如果您希望MyAbstract是一个具有抽象方法child_method的抽象类,Python有一种在^{}模块中表达的方法:

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将检测到用未实现的抽象方法实例化类的尝试。在

相关问题 更多 >