fluent python-9章Pythonスタイルの対象

1356 ワード

2つの前衛下線を絶対に使用しないでください.これは煩わしい利己的な行為です.
9.1対象表示形式
各フェースオブジェクトの言語には、少なくとも1つのオブジェクトの文字列表現形式を取得する標準的な方法がある.Pythonは2つの方法を提供しています.repr()は,開発者が理解しやすいようにオブジェクトの文字列表現形式を返す.str()は、ユーザが理解しやすいようにオブジェクトの文字列表現形式を返す.
9.8 __slots__クラスのプロパティを使用してスペースを節約
デフォルトでは、Pythonは各インスタンスの__dict__という辞書にインスタンス属性を格納します.最下位のハッシュ・リストを使用してアクセスを高速化するには、辞書には大量のメモリが消費されます.数百万個のプロパティの少ないインスタンスを処理する場合は、__slots__クラスのプロパティを使用すると、辞書ではなくメタグループにインスタンスプロパティを格納するために、メモリを大幅に節約できます.
class Vector2d:
    __slots__ = ('__x', '__y')
    typecode = 'd'

クラスで__slots__プロパティを定義する目的は、「このクラスのすべてのインスタンスプロパティはここにあります!」と解釈器に伝えることです.これにより、Pythonは各インスタンスでメタグループのような構造を使用してインスタンス変数を格納し、メモリを消費する__dict__プロパティの使用を回避します.数百万のインスタンスが同時にアクティブである場合、メモリを大幅に節約できます.__slots__の問題要するに、適切に使用すれば、__slots__はメモリを大幅に節約できますが、いくつかの点に注意してください.
  • 各サブクラスは、解釈器が継承した__slots__属性を無視するため、__slots__属性を定義します.
  • インスタンスは、__slots__'__dict__'に追加しない限り、__slots__にリストされている属性しか持たない(これによりメモリを節約する効果が失われる).
  • '__weakref__'__slots__に加えなければ、インスタンスは弱い参照のターゲットとして使用できません.

  • 9.10この章のまとめ
    簡潔さは複雑さに勝る
    Pythonスタイルのオブジェクトを構築するには、本物のPythonオブジェクトの動作を観察します.