如何解决我应该在哪里将抽象类放在python包中?
我正在像这样向我的python包中添加抽象类:
class AbstractClass(ABC):
@abstractmethod
def do_something(self):
pass
将有多个从AbstractClass
继承的子类,如下所示:
class SubClass(AbstractClass):
def do_something(self):
pass
我想知道关于我不了解的抽象类的python软件包是否有约定。
- 应该将抽象类与子类分开,还是应该将它们都放在同一目录中?
- 抽象函数的命名以及那里的约定如何?
我意识到这是相当主观的。我要征求意见,而不是“正确”或“错误”
谢谢!
解决方法
没有约定。如果这仅是一个项目的全部内容,那么我将希望将抽象类与具体子类放在任何级别。如果所有子类都在一个文件中,那么我也将抽象类放在该文件中。如果所有子类都在目录中的单个文件中,则将抽象类放在它们自己的文件中。我将抽象类放在其他地方的原因是,如果我要分离出可与其他项目一起重用的实用程序代码。简而言之,抽象类只是一段代码。只是另一堂课。像对待其他任何东西一样对待。
就命名而言,给定类是/做的类别的自然命名通常就足够了。如果您的抽象类是Animal,而您的子类是Goat,Horse等,我将没有理由调用您的抽象类AbstractAnimal,因为很明显已经发生了什么事情……您不会直接实例化Animal 。另外,如果您正在考虑重用它的类,并且看到其中有一个抽象方法,那么您就知道它是抽象的。
,根据您的风格指南,可能会有。 我唯一的看法是,任何抽象函数(如果未实现)都应该引发错误,并且应属于抽象方法docstring的一部分。
例如,如果您使用的是numpystyle docstrings,则如下所示:
class AbstractClass(ABC):
@abstractmethod
def do_something(self):
"""Does something
Raises
------
NotImplementedError:
Error is raised if function is not implemented in subclass
"""
raise NotImplementedError
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。