我有文檔在我身上膨脹,因爲任何時候我遇到一個複雜的鴨型,我需要某種方式來說「這個鴨型」,而是陷入了無盡的循環「你的功能需要這個輸入,但不記錄它「,然後記錄下來。這導致臃腫,重複的文檔,如下面的:如何記錄鴨子類型?
def Foo(arg):
"""
Args:
arg: An object that supports X functionality, and Y functionality,
and can be passed to Z other functionality.
"""
# Insert code here.
def Bar(arg):
"""
Args:
arg: An object that supports X functionality, and Y functionality,
and can be passed to Z other functionality.
"""
# Insert code here.
等等,等等,爲Baz
,Qux
等功能。我需要一些簡短的寫作方式「arg
是一種(對象類型)」。
對於某些鴨子類型,它就像「類似於字典的對象」一樣簡單:我們知道我們對字典的期望,所以我們知道要傳遞什麼。 A dict
,或者可以模仿它的東西。
我覺得C++與模板類型有同樣的問題。 Haskell會擁有它,但可以使用類型的定義來記錄它。 (注意:Haskell類!= Java/C++/Python /等中的類)(注意:我沒有真正在Haskell中編程,所以請原諒我,如果它是一個蹩腳的例子。)
我應該去傳統OO路由,只需編寫一個基類,然後在文檔中說出「類似於此基類的任何東西」?該代碼不會強制從基類派生(因爲不需要從中派生對象),基本類除了記錄接口的屬性外基本上不添加任何值。
另一方面,我正在編程Python,並嘗試在一種語言的成語中進行編程。 (因爲這樣做通常會受到傷害。)基類對於繼承功能很有用,但是當你的基類完全抽象時,它似乎並沒有增加鴨類型語言的價值。
編輯:要的答案:我知道什麼鴨子類型是(應該是從後明顯)。我在哪裏證明這是一個問題,尤其是,當不存在將文檔附加到的類時。
我喜歡「像行爲」,並保持記錄的要求,一般的,除非有特殊原因,揭露更多的細節。例如,如果只需要索引器和計數器,我仍然會說「像列表一樣行事」。對於其他類型,它是一樣的:「x就像動物一樣」,大概是「狗是動物」的想法在其他地方被記錄/保證。 – 2011-11-09 02:20:13
@pst:是的,但什麼是動物,我們對動物的期望是什麼,我們在哪裏記錄它? – Thanatos
'類Animal'和'類Dog'的地方,有自己的文檔:) Python是非常植根於類實例模型。 – 2011-11-09 02:23:34