我应该将摘要 类 放在 python 包中的什么位置?
Where should I put abstract classes in a python package?
我正在将摘要 类 添加到我的 python 包中,如下所示:
class AbstractClass(ABC):
@abstractmethod
def do_something(self):
pass
会有多个子类继承自AbstractClass
,像这样:
class SubClass(AbstractClass):
def do_something(self):
pass
我想知道 python 包是否有任何我不知道的关于抽象 类 的约定。
- 摘要类应该和子类分开,还是应该都在同一个目录下?
- 关于抽象函数的命名,有什么约定吗?
我意识到这是相当主观的。我是征求意见,不是'right'或'wrong'
是什么
谢谢!
没有约定俗成的想法。如果这只是一个项目,我希望将抽象的 class 与具体的子 class 放在任何级别。如果所有子 class 都在一个文件中,那么我也会将摘要 class 放在该文件中。如果所有子 class 都在目录中的单独文件中,我会将摘要 class 放在它们自己的文件中紧挨着它们的位置。我将摘要 class 放在其他地方的原因是,如果我要分离可与其他项目重用的实用程序代码。简而言之,抽象class只是一段代码。又一个 class。像对待其他人一样对待它。
就命名而言,class 给定 is/does 的自然命名通常就足够了。如果你的抽象 class 是动物,而你的子class 是山羊、马等,我认为没有理由将你的抽象 class 称为抽象动物,因为它已经很清楚了这是怎么回事......你不会直接实例化 Animal 。此外,如果您正在查看 class 考虑重用它,并且在其中看到一个抽象方法,那么您就知道它是抽象的。
根据您的风格指南,可能会有。在我看来唯一是任何抽象函数如果没有实现都应该引发错误,并且应该是抽象方法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
我正在将摘要 类 添加到我的 python 包中,如下所示:
class AbstractClass(ABC):
@abstractmethod
def do_something(self):
pass
会有多个子类继承自AbstractClass
,像这样:
class SubClass(AbstractClass):
def do_something(self):
pass
我想知道 python 包是否有任何我不知道的关于抽象 类 的约定。
- 摘要类应该和子类分开,还是应该都在同一个目录下?
- 关于抽象函数的命名,有什么约定吗?
我意识到这是相当主观的。我是征求意见,不是'right'或'wrong'
是什么谢谢!
没有约定俗成的想法。如果这只是一个项目,我希望将抽象的 class 与具体的子 class 放在任何级别。如果所有子 class 都在一个文件中,那么我也会将摘要 class 放在该文件中。如果所有子 class 都在目录中的单独文件中,我会将摘要 class 放在它们自己的文件中紧挨着它们的位置。我将摘要 class 放在其他地方的原因是,如果我要分离可与其他项目重用的实用程序代码。简而言之,抽象class只是一段代码。又一个 class。像对待其他人一样对待它。
就命名而言,class 给定 is/does 的自然命名通常就足够了。如果你的抽象 class 是动物,而你的子class 是山羊、马等,我认为没有理由将你的抽象 class 称为抽象动物,因为它已经很清楚了这是怎么回事......你不会直接实例化 Animal 。此外,如果您正在查看 class 考虑重用它,并且在其中看到一个抽象方法,那么您就知道它是抽象的。
根据您的风格指南,可能会有。在我看来唯一是任何抽象函数如果没有实现都应该引发错误,并且应该是抽象方法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