2017-03-06 7 views
0

私はPythonプロジェクトに取り組んでいますし、class.variablenameを指定することでインスタンス変数名に直接アクセスできるので、同じものにゲッター関数を実装することをお勧めしますか?私は変数を非公開として宣言していません。ゲッター関数の実装を避けることは、Pythonの悪い習慣ですか?

+1

より軽いものを実行でき、読みやすさが向上し、ランタイムの複雑さが軽減されたら、そのことを行う必要があります。 getterを呼び出すことは、 'self .__ dict__'でルックアップを行うよりもコストがかかるので、読みにくくなるだけでなく、遅くなります*。 –

+2

これは意見ベース(トピック外)だと思いますが、私はgetterを 'property'として実装すると、あなたの属性にアクセスできますが、改ざんされていないことが理想的です。 –

+0

publicでない場合は、1つまたは2つのアンダースコアで変数名を開始します。特別なゲッター/セッターが必要な場合は、それをプライベートとして作成し、ゲッタ/セッターを作成します。 – akg

答えて

10

Javaのような言語では、属性を取得または設定するときに追加の処理(値の検証、アクセス制御、ログなど)を追加したい場合は、クラスのインタフェースを変更する必要がないようにgetterとsetterを実装します。 。これは、書かなかったアプリケーションでクラスを使用する場合に特に重要です。

Pythonでは、インターフェイスを変更せずに@propertyの属性にコードを追加できます。代わりにそのコードを実行する必要があります。開始するには通常の属性アクセスを使用し、後で動作を追加する必要がある場合は@propertyを追加します。

でも、ゲッターとセッターの機能を単純にしておいてください。属性へのアクセスはかなり速くなると予想され、その期待に反することは避けてください。値を取得するために重要な作業を行う必要がある場合は、メソッドが適切ですが、たとえばgetFoo()ではなく、calculateFoo()のようなわかりやすい名前を付けます。

関連する問題