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 abc class クラス名(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(属性値)
などを当てる.