12

この記事stubbing out functions or classesから取った概念を説明できますか?

class Loaf:
    pass  

このクラスはメソッドや属性を定義しませんが、構文的には定義に何かが含まれている必要があるため、passを使用します。これはPythonの予約語で、「移動し、ここには何も表示されない」という意味です。これは何もしないステートメントであり、関数やクラスをスタブアウトするときに適したプレースホルダーです。

ありがとうございました

4

6 に答える 6

28

関数またはクラスをスタブアウトする

これは、クラスまたは関数を作成することを指しますが、まだそれらを実装していません。たとえば、次のようなクラスを作成します。

class Foo(object):
     def bar(self):
         pass

     def tank(self):
         pass

まだ実装していないので、関数をスタブアウトしました。しかし、これは素晴らしい計画ではないと思います。代わりに、次のことを行う必要があります。

class Foo(object):
     def bar(self):
         raise NotImplementedError

     def tank(self):
         raise NotImplementedError

そうすれば、実装する前に誤ってメソッドを呼び出した場合、エラーが発生し、何も起こりません。

于 2011-10-01T13:14:51.310 に答える
8

「スタブ」は、まだ何も実行していないプレースホルダークラスまたは関数ですが、問題のクラスまたは関数を定義するためにそこにある必要があります。まだ実装を記述していなくても、その特定の側面(コレクションに入れる、コールバックとして渡すなど)をすでに使用できるという考え方です。

スタブは、次のような多くのシナリオで役立つテクニックです。

  • チーム開発:多くの場合、リードプログラマーは、メソッドスタブで満たされたクラススケルトンと、メソッドが何をすべきかを説明するコメントを提供し、実際の実装は他のチームメンバーに任せます。
  • 反復型開発:スタブにより、部分的な実装から始めることができます。コードはまだ完成していませんが、それでもコンパイルされます。詳細は、後の反復の過程で入力されます。
  • デモンストレーションの目的:メソッドまたはクラスのコンテンツがデモンストレーションの目的にとって面白くない場合、それはしばしば省略され、スタブのみが残されます。
于 2011-10-01T13:17:10.360 に答える
1

スタブはソフトウェア開発の手法です。モジュールまたはクラスを計画した後、たとえば、UMLダイアグラムを描画して、実装を開始します。

多くのメソッドとクラスを実装する必要があるかもしれないので、スタブから始めます。これは単に、関数の定義を書き留めて、後で実際のコードを残すことだけを意味します。利点は、メソッドを忘れることがなく、コードで見ながらデザインについて考え続けることができることです。

于 2011-10-01T13:14:27.800 に答える
0

その理由passは、Pythonはインデントに依存しており、コロンの後に1つ以上のインデントされたステートメント(afterclassfunction)を期待しているためです。

ステートメントがない場合(スタブアウトされた関数またはクラスの場合のように)、少なくとも1つのインデントされたステートメントが必要なので、特別なpassステートメントをプレースホルダーとして使用できます。次のような効果のないものを簡単に配置できます。

class Loaf:
    True

passそしてそれも問題ありません(しかし私の意見 で使用するよりも明確ではありません)。

于 2011-10-01T13:10:31.670 に答える