「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python のトリック: __スロット__ の魔法

Python のトリック: __スロット__ の魔法

2024 年 11 月 2 日に公開
ブラウズ:841

Python Trick: The Magic of __slots__

動的属性に対する Python の柔軟性はその強みの 1 つですが、場合によっては、メモリの使用量とパフォーマンスを最適化したい場合があります。

スロットを入力します。これにより、クラスの属性の固定セットを定義できるようになり、メモリ オーバーヘッドが削減され、属性アクセスが高速化される可能性があります。


仕組み

通常、Python オブジェクトは属性を格納するための辞書として実装されるため、メモリ消費量が増加する可能性があります。

クラスで スロット を定義することで、よりメモリ効率の高い内部構造を使用するように Python に指示します。

これは、クラスが持つ属性を事前に知っていて、完全な辞書によるオーバーヘッドを回避したい場合に特に便利です。

これは スロット:
の使用方法のデモンストレーションです

class Point:
    __slots__ = ['x', 'y']  # Define the allowed attributes

    def __init__(self, x, y):
        self.x = x
        self.y = y


# Create a Point instance
p = Point(10, 20)

print(p.x)  # Output: 10
print(p.y)  # Output: 20

# Attempting to add a new attribute will raise an AttributeError
try:
    p.z = 30
except AttributeError as e:
    print(e)  # Output: 'Point' object has no attribute 'z'

# Output:
# 10
# 20
# 'Point' object has no attribute 'z'

この例では、slots は Point クラスを x 属性と y 属性のみに制限します。

スロットにリストされていない属性を設定しようとすると、AttributeError が発生します。


なぜクールなのか

slots を使用すると、属性ディクショナリのオーバーヘッドが排除されるため、特に多数のインスタンスを作成する場合に大幅なメモリの節約につながります。

属性へのアクセス速度も向上します。

ただし、注意してください: スロット は Python オブジェクトの一部の動的機能を制限する可能性があり、すべてのユースケースに適しているわけではない可能性があります。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/devasservice/python-trick-the-magic-of-slots-578j?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3