fluent python-9章Pythonスタイルの対象
1356 ワード
2つの前衛下線を絶対に使用しないでください.これは煩わしい利己的な行為です.
9.1対象表示形式
各フェースオブジェクトの言語には、少なくとも1つのオブジェクトの文字列表現形式を取得する標準的な方法がある.Pythonは2つの方法を提供しています.repr()は,開発者が理解しやすいようにオブジェクトの文字列表現形式を返す.str()は、ユーザが理解しやすいようにオブジェクトの文字列表現形式を返す.
9.8
デフォルトでは、Pythonは各インスタンスの
クラスで各サブクラスは、解釈器が継承した インスタンスは、
9.10この章のまとめ
簡潔さは複雑さに勝る
Pythonスタイルのオブジェクトを構築するには、本物のPythonオブジェクトの動作を観察します.
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オブジェクトの動作を観察します.