Is it ok to use children method in abstract class? pep8 says instance has no member
本问题已经有最佳答案,请猛点这里访问。
我在Visual Studio代码中使用了Pep8,我只是尝试编写一些抽象类。
问题是我得到了错误
为了说明我的问题,这里有一个代码片段,为了清晰起见,它被简化为最小值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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类不应该声明,子类将继承
如果希望
1 2 3 4 5 6 7 8 9 10 | 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将检测到用未实现的抽象方法实例化类的尝试。