我应该把抽象类放在python包的哪里?

2024-04-19 12:19:33 发布

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

我正在向python包中添加抽象类,如下所示:

class AbstractClass(ABC):

    @abstractmethod
    def do_something(self):
        pass

将有多个子类从AbstractClass继承,如下所示:

class SubClass(AbstractClass):

    def do_something(self):
        pass

我想知道python包是否有关于抽象类的约定,但我不知道

  • 抽象类应该与子类分开,还是应该都在同一个目录中
  • 抽象函数的命名有什么约定吗

我意识到这是相当主观的。我是在征求意见,而不是什么是“对”或“错”

谢谢


Tags: 函数self目录def抽象类pass子类do
2条回答

根据您的风格指南,可能会有。在我看来,唯一的一件事是,任何抽象函数如果没有实现都会产生错误,并且应该是抽象方法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

我想不出什么惯例。如果这仅仅是一个项目的全部内容,那么我希望将抽象类与具体的子类放在一起,无论它们处于什么级别。如果所有子类都在一个文件中,那么我也会将抽象类放在该文件中。如果所有子类都在dir中的单个文件中,我会将抽象类放在它自己的文件中紧挨着它们。我之所以将抽象类放在其他地方,是因为我要分离出可以在其他项目中重用的实用程序代码。简而言之,抽象类只是一段代码。只是另一门课。像对待其他人一样对待它

就命名而言,给定类的性质/功能的自然命名通常就足够了。如果您的抽象类是Animal,而您的子类是Goat、Horse等,我认为没有理由将您的抽象类称为AbstractAnimal,因为已经很清楚发生了什么……您不会直接实例化Animal。另外,如果你看到一个想重用它的类,你看到其中有一个抽象方法,那么你就知道它是抽象的

相关问题 更多 >