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の値を出力するメッセージを出力します。










