23

私はPythonをOOPとして使用するのはかなり新しいです。私はJavaのバックグラウンドから来ています。Pythonで同等のJavaBeanをどのように記述しますか?基本的に、次のようなクラスが必要です。

  1. シリアライズ可能を実装します。
  2. ゲッターとセッターがあります->プライベートプロパティ
  3. ダミーコンストラクタ

入力はありますか?サンプルコードを探しています!

4

5 に答える 5

32

PythonはJavaではないので、そうではありません。ほとんどの場合、ささいなクラスを記述したり、namedtupleを作成したり、辞書を渡したりする必要があります。しかし、質問に答えるために:

  1. Pythonでは「インターフェースの実装」も意味がありませserializableん(一部のフレームワークや高度なユースケースでは意味がありますが、ここでは意味がありません)。などのシリアル化モジュールは、pickle特別なものを実装または継承せずに機能します(他の方法でプロセスをカスタマイズできますが、ほとんど必要ありません)。
  2. ゲッターやセッターは作成しません。パブリック属性を使用するだけです。後で重要なゲッター/セッターが必要になった場合は、property透過的に変換できます。
  3. 属性を作成してデフォルト値を設定する場合を除いて、ダミーのコンストラクターは必要ありません。しかし、これらの属性に値を割り当てないことはエラーである可能性が高く、そうでない場合でも疑わしいため、これはおそらく( Beanっぽいクラスの場合)悪い考えです。したがって、Pythonにこれらのエラーをキャッチさせてください(AttributeError存在しない属性にアクセスすると発生します)。
于 2013-02-20T20:26:38.167 に答える
4

そうですね、データクラスはJava Beanに似ていると思います。ボイラープレートが削除されるため、データクラスを使用することは実際には良い考えです。

于 2019-09-24T14:28:24.903 に答える
3
  1. pickleモジュールを介してほとんどのオブジェクトをシリアル化できます。
  2. Pythonにはプライベート属性などはありません(以下も参照してください)。
  3. コンストラクターを定義しないクラスは、デフォルトを使用します(メソッドの解決順序に従います)。

コンストラクター'チェーン'の例:

>>> class A(object):
...     def __init__(self):
...         print("A")
...     
... 
>>> class B(A): pass # has no explicit contructor
... 
>>> b = B()
A
>>> 

そして- @delnanが書いたように-あなたは読みたいかもしれません:http ://dirtsimple.org/2004/12/python-is-not-java.html-JavaとPythonはまったく異なる文化を持っているので、ダイビングには時間がかかります両方に(そして感謝して)。

また、いくつかのコードを書いた後、ここにリストされているように、それを一般的なイディオムと比較することが役立つかもしれません(私は確かにこの方法で多くを学びました):

于 2013-02-20T20:21:54.910 に答える
1

シリアライズ可能を実装します。

お気に入りの形式を選択し、それをシリアル化する関数を作成します。JSON、Pickle、YAML、あらゆる作業。決めるだけ!

ゲッターとセッターがあります->プライベートプロパティ

私たちはここではそれをしません、それらはボンデージ言語の属性です、私たちはすべてこの言語の大人です。

ダミーコンストラクタ

コンストラクターは他の言語よりも少し賢いので、ここでも私たちが本当に心配することはありません。__init__したがって、ファクトリを作成するかサブクラス化する必要がある場合は、1つを定義するだけで、すべての初期化を実行できます。

于 2013-02-20T20:26:13.367 に答える
1

ミクが指摘したように:

  1. オブジェクトはpickeモジュールでシリアル化できますが、実装するインターフェースはなく、PythonはJavaではありません。

  2. Pythonにはプライベート属性はありません。通常、人々はプライベート属性を意味するためにバー(アンダースコア)を使用しますが、外部からアクセスできます。ゲッターとセッターは、CPUとプログラマーの両方の時間の無駄です。

  3. mikuの答えに追加するものはありません。

プロパティについて:Pythonでプロパティ機能を使用する方法についての実際の例?

良いテキスト:http ://dirtsimple.org/2004/12/python-is-not-java.html

于 2013-02-20T20:31:18.357 に答える