2010年1月9日土曜日

Pythonの新スタイルクラス

Pythonのクラスは次のように定義します。

class クラス名(親クラス, 親クラス)
    クラス変数
    def __init__(self):
        self.インスタンス変数 = 値
    def メソッド(self):
        return 値

__init__はインスタンス化される際に呼び出されるメソッドです。

Pythonのクラスには、旧スタイルクラスと新スタイルクラスがあります。

class A: ←旧スタイル
    …

class A(object): ←新スタイル
    …

新スタイルクラスはPython2.2で取り入れられました。Python3.0では新スタイルクラスのみが使用できるようになっています。新スタイルクラスには以下の違いがあります。

多重継承の評価順番が違う 旧スタイルは上下優先(まず親をたどってから、同世代をたどる)。新スタイルは左右優先(同世代をたどってからその親世代をたどる)。
スタティックメソッド、クラスメソッドが使用できる スタティックメソッドは第一引数にインスタンスオブジェクトを渡さないでよいメソッド。
クラスメソッドは第一引数にクラスを渡せるメソッド。
__slots__属性が使用できる __slots__があるとインスタンスは指定された変数しかもてなくなる。指定されていない変数を指定するとAttributeErrorとなる

class A(object):
    __slots__ = [“x”, “y”]

a = A()
a.x = 10
a.y = 10
a.z = 10 → AttributeError
__getattribute__メソッドが使用できる よくわからん
プロパティが使用できる y=property(getter、setter、del、docs);

 

0 件のコメント:

コメントを投稿