Pythonクラス入門

Pythonのクラスの作り方についてメモします。
サンプルとして分数を取り扱うBunsuというクラスを作ります。

定義

classでクラスを定義します。クラス名は大文字から始まるのが作法らしいです。
__init__で初期処理を書きます。

class Bunsu:
  def __init__(self,a,b):
    self.bunshi=a
    self.bunbo=b

出力

__str__で出力する際の形式を指定します。
これがないと人間が理解できる形式で出力してくれません。

class Bunsu:
  def __str__(self):
    return f"{self.bunshi}/{self.bunbo}"

メソッド

何らかの処理を施すのがメソッドです。
defを使います。通常の関数と同様ですが引数にselfが必要です。

class Bunsu:
  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

次のような演算が定義できます。
加算+ __add__
減算- __sub__
乗算* __mul__
除算/ __truediv__

比較

比較を定義できます。

class Bunsu:
  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)

実行結果
1/2 2/3
0.5 0.6666666666666666
7/6
False
True

コメント

タイトルとURLをコピーしました