1

申し訳ありませんが、Python のせいにするつもりはありません。これは、私が信じていることが正しいかどうかの単なる反省です。私は 2 年間 Python の信奉者であり、小さなアプリだけを作成し、どこにいても Python を称賛してきました。私は最近、Django のコードを読む機会があり、Python が本当に「可読性を重視する」哲学に従っているかどうか疑問に思い始めました。例えば、

class A:
    a = 10
    b = "Madhu"

    def somemethod(self, arg1):
        self.c = 20.22
        d = "some local variable"
        # do something
        ....
        ...
    def somemethod2 (self, arg2):
        self.c = "Changed the variable"
        # do something 2
        ...

インスタンス変数が使用時に作成される状況 (つまりself.c、上記のスニペット) では、コードの流れを追跡するのは困難です。この方法で書かれた大量のコードを読んでも、どのインスタンス変数が定義されているかを確認することはできません。メソッドが 6 ~ 8 個しかなく、コードが 100 ~ 150 行以下のクラスを読むときでさえ、非常にイライラします。

他のほとんどの言語は C++/Java スタイルと同じアプローチに従っているため、このコードの私の読み方が C++/Java スタイルによって歪められているかどうかを知りたいと思っています。このコードをより流暢に読む Pythonic の方法はありますか? Python 開発者が「読みやすさ」を念頭に置いてこの戦略を採用した理由は何ですか?

4

8 に答える 8

14

提示するコードフラグメントはかなり非定型です(おそらくそれを作成したためかもしれません):

  • 通常、ある時点で浮動小数点数であり、別の時点で文字列であるインスタンス変数(self.c)はありません。常に数値または文字列である必要があります。

  • 通常、任意の方法でインスタンス変数を実現することはありません。代わりに、通常、すべての変数を初期化するコンストラクター(__init __)があります。

  • 通常、a、b、cという名前のインスタンス変数はありません。代わりに、彼らはいくつかの話す名前を持っています。

これらを修正すると、例がはるかに読みやすくなります。

于 2009-01-11T21:21:42.107 に答える
3

私は、あなたが見たものが混乱を招く可能性があり、文書を添付する必要があることに同意します。しかし、紛らわしいことがどの言語でも起こり得ます。

独自のコードでは、コードの保守を容易にするための規則を適用する必要があります。この特定の問題に関して、役立つ可能性のあることがいくつかあります。

  • Epydocのようなものを使用して、クラスが持つすべてのインスタンス変数を指定できます。コードの文書化についても慎重に行い、コードと文書の同期を維持することについても同様に慎重に行ってください。
  • 保守が最も簡単な種類のコードを奨励するコーディング規約を採用します。良い模範を示すことほど良いことはありません。
  • クラスと関数を小さく、明確に定義してください。それらが大きくなりすぎる場合は、それらを分割します。そのように何が起こっているのかを理解する方が簡単です。
  • 参照する前にインスタンス変数を宣言することを本当に主張したい場合は、使用できるメタクラスのトリックがいくつかあります。たとえば、メタクラスロジックを使用して、サブクラスが宣言されたときに宣言された変数のみを後で設定できるという規則を適用する共通基本クラスを作成できます。
于 2009-01-11T21:24:50.617 に答える
2

なんらかの理由でコードの動作が不可解になった場合は、コメントを付けるか、関数名で明らかにする必要があります。

これは私の意見です。

于 2009-01-11T20:53:15.207 に答える
2

個人的には、変数を宣言する必要がないことは、特にクラスを実行するときに Python で危険なことの 1 つだと思います。単純な入力ミスで誤って変数を作成し、コードを長々と読んで、間違いを見つけることができないということは非常に簡単です。

于 2009-01-11T21:00:05.473 に答える
2

必要になる直前にプロパティを追加すると、値を取得する前にプロパティを使用できなくなります。個人的には、ソースを読むだけではクラスを理解するのが難しいといつも感じます。ドキュメントを読んで、それが何をすべきかを調べてから、ソースをもう一度読むと、通常は理解できます。

于 2009-01-11T21:05:20.047 に答える