[解決済み] PythonでMutableな名前付きタプルは存在するのか?
質問
どなたか 名前付きタプル を修正するか、あるいは別のクラスを提供して、ミュータブルオブジェクトで動作するようにできますか?
主に可読性のために、私はこれを行うnamedtupleに似たものを希望します。
from Camelot import namedgroup
Point = namedgroup('Point', ['x', 'y'])
p = Point(0, 0)
p.x = 10
>>> p
Point(x=10, y=0)
>>> p.x *= 10
Point(x=100, y=0)
結果として得られるオブジェクトをpickleすることが可能でなければなりません。 また、名前付きタプルの特性上、表現されたときの出力の順序は、オブジェクトを構築するときのパラメータリストの順序と一致しなければなりません。
どのように解決するのですか?
に代わるミュータブルな方法があります。
collections.namedtuple
-
レコードクラス
.
PyPIからインストールすることができます。
pip3 install recordclass
と同じ API とメモリフットプリントを持っています。
namedtuple
と同じで、代入をサポートしています(同様に高速化されるはずです)。例えば
from recordclass import recordclass
Point = recordclass('Point', 'x y')
>>> p = Point(1, 2)
>>> p
Point(x=1, y=2)
>>> print(p.x, p.y)
1 2
>>> p.x += 2; p.y += 3; print(p)
Point(x=3, y=5)
recordclass
(0.5 以降) は typehints をサポートします。
from recordclass import recordclass, RecordClass
class Point(RecordClass):
x: int
y: int
>>> Point.__annotations__
{'x':int, 'y':int}
>>> p = Point(1, 2)
>>> p
Point(x=1, y=2)
>>> print(p.x, p.y)
1 2
>>> p.x += 2; p.y += 3; print(p)
Point(x=3, y=5)
より完全な の例です。 があります (これにはパフォーマンスの比較も含まれています)。
Recordclass
ライブラリは、現在、別のバリエーションである --
recordclass.make_dataclass
ファクトリ関数を提供します。
recordclass
と
make_dataclass
はクラスを生成することができ、そのインスタンスのメモリ占有量は
__slots__
-ベースのインスタンスよりも少ないメモリを消費します。これは、参照サイクルを持つことを意図していない属性値を持つインスタンスにとって重要である。何百万ものインスタンスを作成する必要がある場合、メモリ使用量を削減するのに役立つかもしれません。以下は、図解の
の例です。
.
関連
-
PythonによるLeNetネットワークモデルの学習と予測
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] Pythonの「名前付きタプル」とは何ですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] データ型が理解できない
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み] 動的属性を持つクラスに対するPylint警告E1101: 'Instance of .. has no ... member'を回避する。
-
[解決済み] repr__メソッドの目的?
-
[解決済み] オブジェクト名の前のシングルアンダーコアとダブルアンダーコアの意味は何ですか?
-
[解決済み] スロットの使い方__?
-
[解決済み] init__と__call__の違いは何ですか?
-
[解決済み] 基本的なイテレータを作るには?
-
[解決済み] 辞書とオブジェクト - どちらがより効率的か、そしてその理由は?