クラスとは何ですか
Python のクラスは、データの保存と動作の定義に使用できるオブジェクトを作成するためのテンプレートです。
- クラスを作成する: キーワード class を使用してクラスを定義します。クラス名の最初の文字は大文字にする必要があります。
- オブジェクトの作成: クラス名 () を使用してオブジェクトを作成します。
- メソッド: クラス内の関数はメソッドと呼ばれ、最初のパラメーターはオブジェクト自体を表す self です。
- コンストラクター: initメソッドは、クラスのインスタンスの作成時に呼び出される特別なメソッドです。
- 継承: クラスは、別のクラスのすべてのプロパティとメソッドを継承できます。
- ポリモーフィズム: クラスのメソッドはサブクラスによってオーバーライドできます。
クラスはオブジェクト指向プログラミングにおける重要な概念であり、クラスを使用するとコードをより適切に整理し、コードの再利用性を向上させることができます。
クラスの簡単な概要
-
クラス内のコンストラクター: 新しいオブジェクトが作成されるたびに、Python はクラス内のコンストラクターを自動的に呼び出します。その名前は __init__ です。コンストラクターを通じて、新しく作成されたオブジェクトの初期プロパティ値を設定できます。
-
クラス内のプライベート属性とメソッド: クラス内のプライベート属性とメソッドは二重アンダースコア (__private_attr など) で始まり、クラス内でのみアクセスでき、クラス外からはアクセスできません。これにより、クラスの実装の詳細が外部プログラムによる干渉から保護されます。
-
クラスの継承: クラスは他のクラスからプロパティとメソッドを継承できるため、コードの重複が減り、コードの再利用性が向上します。
-
クラスのポリモーフィズム: ポリモーフィズムとは、異なるクラスのオブジェクトが同じメソッドを呼び出して、異なる結果を生成できることを意味します。これは、基本クラスで共通のメソッドを定義し、派生クラスでそのメソッドをオーバーライドすることによって実現されます。
-
@property デコレータ: メソッドの呼び出しのようにかっこを使用せずに、クラス内のメソッドに属性としてアクセスできます。
-
シングルトン モード: シングルトン モードとは、クラスがプログラム全体でインスタンスを 1 つだけ持つことを意味します。これは、クラスのコンストラクターを書き換えてデコレーターを使用することで実現されます。
-
抽象クラス: 抽象クラスは、いくつかの抽象メソッドが定義されている特別なクラスです。抽象メソッドは実装がなく、派生クラスで実装する必要があるメソッドです。抽象クラスはインスタンス化できません。
-
メタクラス: メタクラスは、クラスを作成するために使用されるクラスです。これにより、クラスのプロパティやメソッドの検証など、クラスの作成中に追加の操作を実行できるようになります。
-
データのカプセル化: データのカプセル化は、クラスの実装の詳細が外部プログラムに公開されないように、クラスのデータと操作をカプセル化するテクノロジです。これにより、クラスの実装の詳細が外部プログラムによる干渉から保護されます。
簡単なクラス例
- クラス定義
class Dog:
"""定义 Dog 类"""
def __init__(self, name, age):
"""初始化属性 name 和 age"""
self.name = name
self.age = age
def bark(self):
"""模拟狗叫"""
print(f"{self.name} is barking.")
# 创建 Dog 类的实例
dog1 = Dog("Lucy", 3)
dog1.bark() # 输出 "Lucy is barking."
これは単純なクラス定義の例です。Dog クラスには 2 つのプロパティ name と age、およびメソッド bark があります。
- 継承する
class Animal:
"""定义 Animal 类"""
def __init__(self, name):
"""初始化属性 name"""
self.name = name
def move(self):
"""模拟动物移动"""
print(f"{self.name} is moving.")
class Dog(Animal):
"""定义 Dog 类,继承自 Animal"""
def __init__(self, name, age):
"""初始化属性 name 和 age"""
super().__init__(name)
self.age = age
def bark(self):
"""模拟狗叫"""
print(f"{self.name} is barking.")
dog = Dog("Bob", 3)
dog.move() # 输出 "Bob is moving."
dog.bark() # 输出 "Bob is barking."
継承はオブジェクト指向プログラミングにおける重要な概念であり、継承を通じて親クラスからプロパティとメソッドを継承したり、サブクラスで新しいプロパティやメソッドを定義したりできます。上記のコードでは、Dog クラスは Animal クラスを継承しているため、Animal クラスの move メソッドを直接呼び出すことができます。super() 関数を使用して、親クラスのメソッドとプロパティを呼び出します。
- プライベートプロパティ/メソッド
class Dog:
"""定义 Dog 类"""
def __init__(self, name, age):
"""初始化属性 name 和 age"""
self.name = name
self._age = age
def bark(self):
"""模拟狗叫"""
print(f"{self.name} is barking.")
def _secret_bark(self):
"""私有方法模拟狗叫"""
print(f"{self.name} is secretly barking.")
# 创建 Dog 类的实例
dog1 = Dog("Lucy", 3)
dog1.bark() # 输出 "Lucy is barking."
dog1._secret_bark() # 可以调用私有方法,但不建议这样做
_age
クラス内で、属性またはメソッド名が およびなどのアンダースコアで始まる場合、_secret_bark
そのような属性およびメソッドはプライベート属性およびメソッドと呼ばれます。プライベート プロパティとメソッドはクラスの外部から直接アクセスできませんが、クラス内で使用できます。
- 静的メソッド
class Dog:
"""定义 Dog 类"""
def __init__(self, name, age):
"""初始化属性 name 和 age"""
self.name = name
self.age = age
def bark(self):
"""模拟狗叫"""
print(f"{self.name} is barking.")
@staticmethod
def info():
"""静态方法,显示有关类的信息"""
print("This is a dog class.")
Dog.info() # 输出 "This is a dog class."
静的メソッドは、クラスまたはインスタンスのプロパティにアクセスする必要がなく、クラス名を通じて直接呼び出すことができる特別なメソッドです。@staticmethod
通常のメソッドは、デコレータを使用して静的メソッドとして定義できます。
- クラスメソッド
class Dog:
"""定义 Dog 类"""
animal_type = "mammal" # 类属性
def __init__(self, name, age):
"""初始化属性 name 和 age"""
self.name = name
self.age = age
def bark(self):
"""模拟狗叫"""
print(f"{self.name} is barking.")
@classmethod
def get_animal_type(cls):
"""类方法,返回 animal_type"""
return cls.animal_type
print(Dog.get_animal_type()) # 输出 "mammal"
クラス メソッドは静的メソッドに似ていますが、クラスのプロパティにアクセスでき、@classmethod
デコレータを使用して通常のメソッドをクラス メソッドとして定義できます。クラス メソッドでは、最初のパラメータはクラス自体である必要があり、通常はcls
を使用して示されます。