Pythonのクラス
クラスはオブジェクトを定義するための仕組みデス。
オブジェクトは属性とメソッドを持つデータ構造のことです。
クラスを定義することで、オブジェクトの属性やメソッドをまとめて管理することができます。
クラスの定義
クラスは、class
キーワードを使用して定義します。
クラス名は、大文字で始め、単語と単語の間にキャメルケース(CamelCase)を使用する。
※キャメルケースは、単語を組み合わせたときに最初の単語を小文字、2つ目以降の単語の最初の文字を大文字にすることです。
class ClassName: #キャメルケース(CamelCase)を使用する
# 属性とメソッドを定義する
クラスの定義では、属性とメソッドを定義できマス。
クラスの属性とメソッド
クラスには、属性とメソッドを定義することができます。
・メソッドは、オブジェクトの動作を表します。メソッドの定義にはdefを使います。
・属性は、オブジェクトの状態を表します。クラスの属性を表すにはself.
を付けます。
クラスから生成された具体的なオブジェクトをインスタンスと呼びます。
# クラス
class Person:
# メソッド
def getName(self):
# 属性
return self.name
def getAge(self):
# 属性
return self.age
メソッドはオブジェクトにドット演算子.
を使って呼び出します。
person = Person() # インスタンスを生成
person.getName() # メソッドの呼び出し
コンストラクタ
コンストラクタは、クラスのインスタンスを作成する際に最初に呼び出されるメソッドです。
インスタンスに初期値を設定したり、インスタンスで使用するリソースを初期化したりするために使用されます。
コンストラクタは、クラスの定義で __init__(self, ...)
という形式で定義します。self
は、インスタンス自身を表す予約語です。
例:次のコードは、名前と年齢を持つ人を表現するクラス Person
を定義しています
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Real", 54)
print(person.name)
print(person.age)
# 実行結果
# Real
# 54
↑Person
クラスのインスタンスを作成し、name
と age
の属性を設定しています。
コンストラクタは、クラスの定義で、任意の数の引数を指定することができます。
例:次のコードは、名前、年齢、住所を持つ人を表現するクラス Person
を定義しています。
class Person:
def __init__(self, name, age, address):
self.name = name
self.age = age
self.address = address
person = Person("Real", 54, "123 Waka Street")
print(person.name)
print(person.age)
print(person.address)
# 実行結果
# Real
# 54
# 123 Main Street
このコードは、Person
クラスのインスタンスを作成し、name
、age
、address
の属性を設定しています。
コンストラクタは、クラスのインスタンスを作成する際に、必ず呼び出されます。
コンストラクタを定義しない場合は、Pythonはデフォルトのコンストラクタを作成します。
デフォルトのコンストラクタは、インスタンスに初期値を設定しません。
クラス定義の具体例
クラスの定義
クラスの定義では、以下の要素を指定できます。
- クラス名
- 属性
- メソッド
例1デス。
# クラス
class Person:
# メソッド
def getName(self):
# 属性
return self.name
def getAge(self):
# 属性
return self.age
- クラス名 _ Person
- 属性 _ name,age
- メソッド _ getName,getAge
クラスのインスタンス化
クラスを定義したら、インスタンス化することでクラスのインスタンスを生成することができます。
例2デス。
# インスタンスを生成
Real = Person()
Person()
は、Person
クラスをインスタンス化してReal
オブジェクトを生成します。
メソッドの呼び出し
インスタンスを生成したら、演算子.
を使って呼び出します。
例3デス。
# 属性に値を代入する
Real.name = "Real"
Real.age = 54#
# メソッドを呼び出す
name = Real.getName()
age = Real.getAge()
getName
メソッドとgetAge
メソッドを呼び出します。
例1+例2+例3デス↓
# クラス
class Person:
# メソッド
def getName(self):
# 属性
return self.name
def getAge(self):
# 属性
return self.age
# インスタンスを生成
Real = Person()
# 属性に値を代入する
Real.name = "Real"
Real.age = 54#
# メソッドを呼び出す
name = Real.getName()
age = Real.getAge()
# 出力
print(name,age)
# 実行結果
# Real
# 54
クラスの継承
クラスは、他のクラスから継承することができマス。
class ChildClass(ParentClass):
# 継承元のクラスの属性とメソッドを拡張する
継承することで、継承元のクラスの属性とメソッドを拡張することができます。
ナイトクラスを継承してパラディンクラスになる的な?
例
クラス継承の例デス。
ChildClass
クラスは、ParentClass
クラスを継承しています。ChildClass
オブジェクトは、ParentClass
オブジェクトの属性とメソッドをすべて利用できます。
class ParentClass:
# 属性
attr1 = 10
# メソッド
def method1(self):
print("method1が呼び出されました")
class ChildClass(ParentClass):
# 属性
attr2 = "Hello, world!"
# メソッド
def method2(self):
print("method2が呼び出されました:", self.attr2)
# ParentClassオブジェクトを生成
parent_class = ParentClass()
# ChildClassオブジェクトを生成
child_class = ChildClass()
# 1 _ParentClassオブジェクトの属性とメソッドを呼び出す
print(parent_class.attr1)
parent_class.method1()
# 2 _ChildClassオブジェクトの属性とメソッドを呼び出す
print(child_class.attr1)
child_class.method1()
# 3 _ChildClassオブジェクトの属性とメソッドを呼び出す
print(child_class.attr2)
child_class.method2()
上記コードの実行結果↓
# 1
10
method1が呼び出されました
# 2
10
method1が呼び出されました
# 3
Hello, world!
method2が呼び出されました: Hello, world!
実行結果 #1
「1 _ParentClassオブジェクトの属性とメソッドを呼び出す」の結果デス。
ParentClass
オブジェクトの属性attr1
は、10です。ParentClass
オブジェクトのメソッドmethod1()
は、method1が呼び出されました
というメッセージを出力します。
実行結果 #2
「# 2 _ChildClassオブジェクトの属性とメソッドを呼び出す」の結果デス。
ChildClass
オブジェクトは、ParentClass
オブジェクトを継承しているため、ParentClass
オブジェクトの属性とメソッドをすべて利用できます。
そのため、ChildClass
オブジェクトの属性attr1
も10です。
また、ChildClass
オブジェクトのメソッドmethod1()
もParentClass
オブジェクトのメソッドmethod1()
と同じように動作します。
実行結果 #3
「# 3 _ChildClassオブジェクトの属性とメソッドを呼び出す」の結果デス。
さらに、ChildClass
オブジェクトは、独自の属性attr2
とメソッドmethod2()
を定義しています。attr2
の値は「Hello, world!」であり、method2()
はattr2
の値を出力するメッセージを出力します。