[解決済み] クラス属性とインスタンス属性の違いは何ですか?
2022-05-11 11:49:06
質問
何か意味のある区別があるのでしょうか。
class A(object):
foo = 5 # some default value
vs.
class B(object):
def __init__(self, foo=5):
self.foo = foo
インスタンスを大量に作成する場合、2つのスタイルでパフォーマンスや必要なスペースに違いはありますか?コードを読んだとき、2つのスタイルの意味が大きく異なると思いますか?
どのように解決するのですか?
重要な セマンティック の違いがあります (パフォーマンスの考慮を超えて)。
- 属性がインスタンスに定義されている場合 (これは通常行うことです)、参照されるオブジェクトが複数存在する可能性があります。 それぞれがその属性の全く別のバージョンを取得します .
-
属性がクラスで定義されている場合
の場合、参照される基礎となるオブジェクトは1つだけなので、そのクラスの異なるインスタンスに対する操作が両方とも属性を設定/(追加/拡張/挿入/など)しようとすると
- もしその属性が 組み込み型 (int、float、boolean、string など) である場合、あるオブジェクトに対する操作は、その値
- もし属性が ミュータブル型 (リストやディクショナリなど)である場合、不要な漏えいが発生します。
例えば
>>> class A: foo = []
>>> a, b = A(), A()
>>> a.foo.append(5)
>>> b.foo
[5]
>>> class A:
... def __init__(self): self.foo = []
>>> a, b = A(), A()
>>> a.foo.append(5)
>>> b.foo
[]
関連
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] インスタンスのクラス名を取得する?
-
[解決済み] HTMLのid属性とname属性の違い
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenvなどの違いは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonはWordの読み書きの変更操作を実装している
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
Python 入出力と高次代入の基礎知識
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)