この記事stubbing out functions or classes
から取った概念を説明できますか?
class Loaf:
pass
このクラスはメソッドや属性を定義しませんが、構文的には定義に何かが含まれている必要があるため、passを使用します。これはPythonの予約語で、「移動し、ここには何も表示されない」という意味です。これは何もしないステートメントであり、関数やクラスをスタブアウトするときに適したプレースホルダーです。
ありがとうございました
関数またはクラスをスタブアウトする
これは、クラスまたは関数を作成することを指しますが、まだそれらを実装していません。たとえば、次のようなクラスを作成します。
class Foo(object):
def bar(self):
pass
def tank(self):
pass
まだ実装していないので、関数をスタブアウトしました。しかし、これは素晴らしい計画ではないと思います。代わりに、次のことを行う必要があります。
class Foo(object):
def bar(self):
raise NotImplementedError
def tank(self):
raise NotImplementedError
そうすれば、実装する前に誤ってメソッドを呼び出した場合、エラーが発生し、何も起こりません。
「スタブ」は、まだ何も実行していないプレースホルダークラスまたは関数ですが、問題のクラスまたは関数を定義するためにそこにある必要があります。まだ実装を記述していなくても、その特定の側面(コレクションに入れる、コールバックとして渡すなど)をすでに使用できるという考え方です。
スタブは、次のような多くのシナリオで役立つテクニックです。
スタブはソフトウェア開発の手法です。モジュールまたはクラスを計画した後、たとえば、UMLダイアグラムを描画して、実装を開始します。
多くのメソッドとクラスを実装する必要があるかもしれないので、スタブから始めます。これは単に、関数の定義を書き留めて、後で実際のコードを残すことだけを意味します。利点は、メソッドを忘れることがなく、コードで見ながらデザインについて考え続けることができることです。
その理由pass
は、Pythonはインデントに依存しており、コロンの後に1つ以上のインデントされたステートメント(afterclass
やfunction
)を期待しているためです。
ステートメントがない場合(スタブアウトされた関数またはクラスの場合のように)、少なくとも1つのインデントされたステートメントが必要なので、特別なpass
ステートメントをプレースホルダーとして使用できます。次のような効果のないものを簡単に配置できます。
class Loaf:
True
pass
そしてそれも問題ありません(しかし私の意見 で使用するよりも明確ではありません)。