私はPythonをOOPとして使用するのはかなり新しいです。私はJavaのバックグラウンドから来ています。Pythonで同等のJavaBeanをどのように記述しますか?基本的に、次のようなクラスが必要です。
- シリアライズ可能を実装します。
- ゲッターとセッターがあります->プライベートプロパティ
- ダミーコンストラクタ
入力はありますか?サンプルコードを探しています!
PythonはJavaではないので、そうではありません。ほとんどの場合、ささいなクラスを記述したり、namedtupleを作成したり、辞書を渡したりする必要があります。しかし、質問に答えるために:
serializable
ん(一部のフレームワークや高度なユースケースでは意味がありますが、ここでは意味がありません)。などのシリアル化モジュールは、pickle
特別なものを実装または継承せずに機能します(他の方法でプロセスをカスタマイズできますが、ほとんど必要ありません)。property
透過的に変換できます。AttributeError
存在しない属性にアクセスすると発生します)。そうですね、データクラスはJava Beanに似ていると思います。ボイラープレートが削除されるため、データクラスを使用することは実際には良い考えです。
コンストラクター'チェーン'の例:
>>> 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はまったく異なる文化を持っているので、ダイビングには時間がかかります両方に(そして感謝して)。
また、いくつかのコードを書いた後、ここにリストされているように、それを一般的なイディオムと比較することが役立つかもしれません(私は確かにこの方法で多くを学びました):
シリアライズ可能を実装します。
お気に入りの形式を選択し、それをシリアル化する関数を作成します。JSON、Pickle、YAML、あらゆる作業。決めるだけ!
ゲッターとセッターがあります->プライベートプロパティ
私たちはここではそれをしません、それらはボンデージ言語の属性です、私たちはすべてこの言語の大人です。
ダミーコンストラクタ
コンストラクターは他の言語よりも少し賢いので、ここでも私たちが本当に心配することはありません。__init__
したがって、ファクトリを作成するかサブクラス化する必要がある場合は、1つを定義するだけで、すべての初期化を実行できます。
ミクが指摘したように:
オブジェクトはpickeモジュールでシリアル化できますが、実装するインターフェースはなく、PythonはJavaではありません。
Pythonにはプライベート属性はありません。通常、人々はプライベート属性を意味するためにバー(アンダースコア)を使用しますが、外部からアクセスできます。ゲッターとセッターは、CPUとプログラマーの両方の時間の無駄です。
mikuの答えに追加するものはありません。
プロパティについて:Pythonでプロパティ機能を使用する方法についての実際の例?
良いテキスト:http ://dirtsimple.org/2004/12/python-is-not-java.html