簡體   English   中英

我應該將抽象類放在 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 包是否有關於我不知道的抽象類的任何約定。

  • 抽象類應該與子類分開,還是應該都在同一個目錄中?
  • 抽象函數的命名怎么樣,那里有什么約定?

我意識到這是相當主觀的。 我在征求意見,而不是“對”或“錯”

謝謝!

沒有想到任何約定。 如果這只是一個項目的全部內容,我希望將抽象類與具體子類放在它們所處的任何級別。 如果所有子類都在一個文件中,那么我也會將抽象類放在該文件中。 如果所有子類都在目錄中的單個文件中,我會將抽象類放在它們自己的文件中。 我將抽象類放在其他地方的原因是,如果我正在分離可以與其他項目重用的實用程序代碼。 簡而言之,抽象類只是一段代碼。 又是一堂課。 像對待任何其他人一樣對待它。

就命名而言,給定類的自然命名通常就足夠了。 如果您的抽象類是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM