Pythonのクラスのサンプルです.
目次 クラス 継承 クラスメソッド・静的メソッド クラスメソッド 静的メソッド プロパティ 抽象クラス 演算子のオーバーロード printに渡す
クラス
class クラス名 (): クラス属性名 = 値 def __init__ (self, 引数 ): self .属性名 = 値 def メソッド名 (self, 引数 ): 処理 def __マングリングするメソッド名 (self,引数 ) 処理
継承
class 派生クラス名 (基底クラス名 ): 以下略
属性やメソッドを再定義すればオーバーライド
マングリングしたメソッドは継承されない
class 派生クラス名(基底クラス名1, 基底クラス名2):
の形で多重継承できる
クラスメソッド・静的メソッド
いずれもクラス名.メソッド名(引数)
で呼び出す.
クラスメソッド
@classmethod def メソッド名 (cls,引数 )
クラスメソッドはオーバーライドできる.
クラスメソッドはcls
をとるために,継承時にクラスを特定できる.
静的メソッド
@staticmethod def メソッド名 (引数 )
静的メソッドはクラスメンバ,クラス関数にアクセスできない.
プロパティ
デコレータを使ってプロパティを定義できる.
属性値をメソッド風に書いてgetとし,setにはプロパティ名.setter
のデコレータを作る.
class Player (): MAX_HP = 200 @property def hp (self ): return self .__hp @hp.setter def hp (self, value ): if value > Player.MAX_HP: value = Player.MAX_HP self .__hp = value
抽象クラス
import abcclass クラス名 (abc.ABC): @abc.abstractmethod def メソッド名 (self,引数 ): pass
抽象基底クラスからの派生クラスでオーバーライドしなかった場合,インスタンスを生成することができない.
演算子のオーバーロード
平面上の位置に関して加法を定義する例.
class Location : def __init__ (self, x, y ): self .x = x self .y = y def __add__ (self, other ): x = self .x + other.x y = self .y + other.y return Location(x, y)
printに渡す
def __str__ (self ): return 文字列
文字列にはstr(属性値)
などを当てる.