1

私が言うことができるのと同じ方法で、クラスの(プライベート-> _x)データメンバーを文書化することは役に立ちます:

struct foo {
  foo* p_a /* Documentation */
  foo ** pp_b /* Documentation */
};

しかし、Pythonの場合(おそらくここでは別のプログラミングモデルを使用しています)、それを行うための好ましい方法は何ですか?このクラスが何をモデル化しているかをすぐに確認したい場合、参照によって暗黙的にそれらを定義しても、それを削減することはできません。

これは、UML図などへの直接変換にも役立ちます。

4

2 に答える 2

1

そうです、Python別のプログラミングモデルです。理解すべきことは、Pythonでは、次のことを確認したときです。

class Foo(object):
    ...

これは実際には「クラス宣言」ではありません。それは「クラスの創造」のようなものです。class..インタプリタがラインに到達した瞬間に、前ではなく、クラスオブジェクトが作成され、準備が整います。そして、このクラスオブジェクトについての1つのことは、基本的にそのインスタンスについて何も知らないということです。

クラスがインスタンスにアクセスできる(そしてデータメンバーは通常インスタンス上にある)のは、実際にメソッドを実行しているときだけです。この構文:

def bar(self, x):
    ...

は興味深い。明示的な最初の引数は、何か別のことが起こっているというヒントのようなものです。そうです:あなたが書くときinstance.bar(x)、実際に起こっているのはFoo.bar(instance, x)です。

つまりFoo、インスタンスに到達する唯一のチャンスはメソッドを使用することです。

したがって、明示的な__init__クラスモデルが必要な場合は、メソッドに明示的にリストするのが最善の策です。

class Foo(object):
    def __init__(self):
        self._bar = None  # Bar is an important "private" member
        self._baz = None  # As is baz
        self._fizzbuzz = 4  # Of course, you can also provide defaults here

私がここでベースから離れている場合は、修正したいのですが、これが現在のPythonの理解方法です。

于 2012-06-22T18:41:56.567 に答える
1

クラスまたはメソッドの最初のステートメントとしてdocstring(三重引用符で囲まれた文字列)を使用できます。docstringの標準形式に最も近いものは、PEP257として指定されています

class foo( object ):
    """
    This is a foo.
    _a is foo's a; there are many like it but this one is foo's.
    _b is foo's b and demons may fly out of your nose if you modify it.
    """

    def __init__( self ): ...
于 2012-06-22T18:34:39.917 に答える