Pythonのクラスのサンプルです.

目次

  1. クラス
  2. 継承
  3. クラスメソッド・静的メソッド
    1. クラスメソッド
    2. 静的メソッド
  4. プロパティ
  5. 抽象クラス
  6. 演算子のオーバーロード
  7. printに渡す

クラス

class クラス名():

クラス属性名 = 値

def __init__(self, 引数):
self.属性名 = 値

def メソッド名(self, 引数):
処理

def __マングリングするメソッド名(self,引数) #クラス内部だけで使うメソッド
処理

継承

class 派生クラス名(基底クラス名):
以下略
  • 属性やメソッドを再定義すればオーバーライド
  • マングリングしたメソッドは継承されない
  • class 派生クラス名(基底クラス名1, 基底クラス名2):の形で多重継承できる

クラスメソッド・静的メソッド

いずれもクラス名.メソッド名(引数)で呼び出す.

クラスメソッド

@classmethod
def メソッド名(cls,引数)
  • クラスメソッドはオーバーライドできる.
  • クラスメソッドはclsをとるために,継承時にクラスを特定できる.

静的メソッド

@staticmethod
def メソッド名(引数) #selfは不要

静的メソッドはクラスメンバ,クラス関数にアクセスできない.

プロパティ

デコレータを使ってプロパティを定義できる.
属性値をメソッド風に書いて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(属性値)などを当てる.