複雑なダックタイプに遭遇するたびに、「このダックタイプ」と言う方法が必要ですが、代わりに「あなたの関数はこの入力のこれを必要としますが、 「それを文書化しないでください」、そしてそれを文書化します。これにより、次のような肥大化した反復的なドキュメントが作成されます。
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
「 (オブジェクトのタイプ)である」という短い書き方が必要です。
一部のアヒル型では、「辞書のようなオブジェクト」と同じくらい簡単です。辞書に何を期待するかを知っているので、何を渡すかを知っています。、dict
またはそれを模倣できるもの。
テンプレート化された型に関して、C++ にも同じ問題があると思います。Haskell にはそれがありますが、型クラスの定義を使用して文書化できます。(注: Haskell クラス != Java/C++/Python などのクラス) (注: 私は実際には Haskell でプログラミングを行っていないので、下手な例である場合はご容赦ください。)
従来の OO ルートを使用して、基本クラスを作成し、ドキュメントで「この基本クラスのようなもの」と言う必要がありますか? コードは基本クラスからの派生を強制せず (オブジェクトを派生させる必要がないため)、基本クラスはインターフェイスのプロパティを文書化する以外に値を追加しません。
一方、私は Python をプログラミングしており、言語のイディオム内でプログラミングしようとしています。基本クラスは機能を継承するのに適していますが、基本クラスが完全に抽象的である場合、ダックタイプの言語で価値を追加するようには見えません。
編集:答えに:私はアヒルのタイピングが何であるかを知っています(それは投稿から明らかなはずです)。それはどこに文書化すればよいですか、特に質問です。ドキュメントを添付するクラスが存在しない場合。