Pythonのクラスの作り方についてメモします。
サンプルとして分数を取り扱うBunsuというクラスを作ります。
定義
classでクラスを定義します。クラス名は大文字から始まるのが作法らしいです。
__init__で初期処理を書きます。
class Bunsu:
def __init__(self,a,b):
self.bunshi=a
self.bunbo=b
def __init__(self,a,b):
self.bunshi=a
self.bunbo=b
出力
__str__で出力する際の形式を指定します。
これがないと人間が理解できる形式で出力してくれません。
class Bunsu:
def __str__(self):
return f"{self.bunshi}/{self.bunbo}"
def __str__(self):
return f"{self.bunshi}/{self.bunbo}"
メソッド
何らかの処理を施すのがメソッドです。
defを使います。通常の関数と同様ですが引数にselfが必要です。
class Bunsu:
def value(self):
return self.bunshi/self.bunbo
def value(self):
return self.bunshi/self.bunbo
演算
四則演算を定義できます。
__add__で+を使ったときの演算を定義します。
class Bunsu:
def __add__(self,other):
a=self.bunshi*other.bunbo+other.bunshi*self.bunbo
b=self.bunbo*other.bunbo
c=Bunsu(a,b)
return c
def __add__(self,other):
a=self.bunshi*other.bunbo+other.bunshi*self.bunbo
b=self.bunbo*other.bunbo
c=Bunsu(a,b)
return c
次のような演算が定義できます。
加算+ __add__
減算- __sub__
乗算* __mul__
除算/ __truediv__
比較
比較を定義できます。
class Bunsu:
def __eq__(self,other):
return self.value()==other.value()
def __lt__(self, other):
return self.value()<other.value()
def __eq__(self,other):
return self.value()==other.value()
def __lt__(self, other):
return self.value()<other.value()
次のような比較が定義できます。
等しい== __eq__
等しくない!= __ne__
小さい __lt__
以下 __le__
大きい __gt__
以上 __ge__
使い方
class Bunsu:
def __init__(self,a,b):
self.bunshi=a
self.bunbo=b
def __str__(self):
return f"{self.bunshi}/{self.bunbo}"
def value(self):
return self.bunshi/self.bunbo
def __add__(self,other):
a=self.bunshi*other.bunbo+other.bunshi*self.bunbo
b=self.bunbo*other.bunbo
c=Bunsu(a,b)
return c
def __eq__(self,other):
return self.value()==other.value()
def __lt__(self, other):
return self.value()<other.value()
x=Class(1,2)
y=Class(2,3)
print(x,y)
print(x.value(),y.value())
print(x+y)
print(x==y)
print(x<y)
def __init__(self,a,b):
self.bunshi=a
self.bunbo=b
def __str__(self):
return f"{self.bunshi}/{self.bunbo}"
def value(self):
return self.bunshi/self.bunbo
def __add__(self,other):
a=self.bunshi*other.bunbo+other.bunshi*self.bunbo
b=self.bunbo*other.bunbo
c=Bunsu(a,b)
return c
def __eq__(self,other):
return self.value()==other.value()
def __lt__(self, other):
return self.value()<other.value()
x=Class(1,2)
y=Class(2,3)
print(x,y)
print(x.value(),y.value())
print(x+y)
print(x==y)
print(x<y)
実行結果
1/2 2/3
0.5 0.6666666666666666
7/6
False
True
コメント