[英]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 包是否有關於我不知道的抽象類的任何約定。
我意識到這是相當主觀的。 我在征求意見,而不是“對”或“錯”
謝謝!
沒有想到任何約定。 如果這只是一個項目的全部內容,我希望將抽象類與具體子類放在它們所處的任何級別。 如果所有子類都在一個文件中,那么我也會將抽象類放在該文件中。 如果所有子類都在目錄中的單個文件中,我會將抽象類放在它們自己的文件中。 我將抽象類放在其他地方的原因是,如果我正在分離可以與其他項目重用的實用程序代碼。 簡而言之,抽象類只是一段代碼。 又是一堂課。 像對待任何其他人一樣對待它。
就命名而言,給定類的自然命名通常就足夠了。 如果您的抽象類是 Animal,而您的子類是 Goat、Horse 等,我認為沒有理由將您的抽象類稱為 AbstractAnimal,因為已經很清楚發生了什么……您不會直接實例化 Animal . 此外,如果您正在查看一個考慮重用它的類,並且您在其中看到一個抽象方法,那么您就知道它是抽象的。
根據您的風格指南,可能有。 我認為唯一的事情是任何抽象函數如果沒有實現都應該引發錯誤,並且應該是抽象方法文檔字符串的一部分。
例如,如果您使用的是numpystyle 文檔字符串,則這樣的內容是理想的:
class AbstractClass(ABC):
@abstractmethod
def do_something(self):
"""Does something
Raises
------
NotImplementedError:
Error is raised if function is not implemented in subclass
"""
raise NotImplementedError
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.