記事ディレクトリ
【Pythonの基礎】-07 オブジェクト指向プログラミングの基礎知識(1)
3. 継承
継承は、Python のオブジェクト指向プログラミングにおける重要な概念です。これにより、新しいクラスを作成し、1 つ以上の既存のクラス (親クラスまたは基本クラスと呼ばれます) からプロパティとメソッドを継承できます。継承の概念を詳しく理解し、事例で説明してみましょう。
3.1 継承の概念
継承は、クラス (サブクラスまたは派生クラスと呼ばれます) が別のクラス (親クラスまたは基本クラスと呼ばれます) からプロパティとメソッドを継承できるようにするメカニズムです。サブクラスは親クラスのプロパティを継承し、独自の新しい機能を追加したり、継承されたメソッドをオーバーライドしたりできます。
3.2 継承の構文
Python では、サブクラスの定義で親クラスを指定することで継承が実現されます。構文は次のとおりです。
class ChildClass(ParentClass):
# 子类的定义
3.3 継承の例
例を使用して継承の概念を説明しましょう。
class Animal:
def __init__(self, name):
self.name = name
def sound(self):
print("动物发出声音")
class Dog(Animal):
def sound(self):
print("狗在汪汪叫")
class Cat(Animal):
def sound(self):
print("猫在喵喵叫")
dog = Dog("旺财")
cat = Cat("咪咪")
dog.sound() # 输出 "狗在汪汪叫"
cat.sound() # 输出 "猫在喵喵叫"
上の例では、動物の鳴き声を出力するメソッドAnimal
を備えた という親クラスを定義しましたsound
。次に、クラスを継承する2 つのサブクラスDog
とを作成しました。メソッドはサブクラスで書き換えられ、それぞれ犬の鳴き声と猫の鳴き声を実現します。Cat
Animal
sound
Dog
とクラスのインスタンスを作成しCat
、それらのメソッドを呼び出すとsound
、それぞれが吠えたり鳴いたりすることがわかります。これは継承の役割であり、サブクラスは親クラスの特性を継承し、必要に応じて変更または拡張できます。
3.4 多重継承
単一継承に加えて、Python は多重継承もサポートしています。つまり、サブクラスは複数の親クラスから継承できます。構文は次のとおりです。
class ChildClass(ParentClass1, ParentClass2):
# 子类的定义
多重継承により、サブクラスは複数の親クラスの特性を持ちながら、複数の親クラスからプロパティとメソッドを継承できます。
継承はオブジェクト指向プログラミングにおける非常に強力で柔軟な機能であり、コードの再利用と拡張が容易になります。継承を通じて、次を使用できます。
同じコードを繰り返さずに、動作が異なる関連クラスを作成します。これにより、コードの保守性とスケーラビリティが向上します。
4. 包装
Python のオブジェクト指向プログラミングでは、カプセル化はデータと関連するメソッドを 1 つの全体に結合できるようにする重要な概念であり、実装の詳細は外部から隠されます。カプセル化を通じて、クラスの内部プロパティとメソッドへのアクセスを制御でき、コードのセキュリティと保守性が向上します。カプセル化の概念を詳しく理解して、ケースで説明してみましょう。
4.1 カプセル化の概念
カプセル化は、情報の隠蔽を実現し、データの一貫性を保護するために、データとメソッドを一緒にラップするメカニズムです。クラスでは、アクセス修飾子を使用してプロパティとメソッドのアクセス レベルを制御できます。一般的なアクセス修飾子は、public、protected、および private です。
- パブリック: プロパティとメソッドはクラスの外部からアクセスできます。
- 保護: プロパティとメソッドには、クラスとそのサブクラス内でのみアクセスできます。
- プライベート: プロパティとメソッドにはクラス内でのみアクセスできます。
4.2 カプセル化の場合
例を使用してカプセル化の概念を説明しましょう。
class Person:
def __init__(self, name, age):
self.name = name
self._age = age # 保护属性,约定以单下划线开头
self.__address = "北京" # 私有属性,约定以双下划线开头
def display_info(self):
print(f"姓名:{
self.name}")
print(f"年龄:{
self._age}")
print(f"地址:{
self.__address}")
person = Person("Mingfeng", 25)
person.display_info()
上の例では、Person
public プロパティname
、 protected プロパティ_age
、および private プロパティを持つ という名前のクラスを定義しました__address
。クラスのメソッドで、これらのプロパティに直接アクセスできます。
Person
クラスのインスタンスを作成してメソッドを呼び出すと、クラスの外部はパブリックプロパティと保護されたプロパティにアクセスできますが、プライベート プロパティに直接アクセスできないことdisplay_info
がわかります。プライベート プロパティには、フォーム (例)の使用など、特定の方法でアクセスできます。name
_age
__address
_类名__属性名
_Person__address
カプセル化により、クラスの内部実装の詳細を非表示にし、外部からの直接アクセスや属性の変更を防ぎ、コードのセキュリティと保守性を向上させることができます。また、カプセル化により、コードの組織化と構造が改善され、コードがより読みやすく、理解しやすくなります。
カプセル化はアクセスを制限することを目的としたものではなく、コードをより堅牢かつ拡張可能にするための適切なプログラミング手法を提供することを目的としていることに注意してください。適切な訪問先を選択する必要があります
修飾子に質問し、特定の規則に従ってオブジェクト指向コードを記述します。
5. ポリモーフィズム
Python のオブジェクト指向プログラミングでは、ポリモーフィズムは、異なるオブジェクトが同じメソッドに対して異なる応答をできるようにする重要な概念です。ポリモーフィズムによりコードの柔軟性とスケーラビリティが向上し、さまざまなオブジェクトを処理する共通のコードを作成できるようになります。ポリモーフィズムの概念を詳しく理解して、事例で説明してみましょう。
5.1 ポリモーフィズムの概念
ポリモーフィズムとは、オブジェクトの複数の形式を指します。オブジェクト指向プログラミングでは、ポリモーフィズムとは、異なるオブジェクトによって同じ動作が実行できること、つまり、異なるオブジェクトが同じメソッドに対して異なる応答を行うことができることを意味します。ポリモーフィズムにより、より一般的なコードを記述し、コードの再利用性とスケーラビリティを向上させることができます。
5.2 ポリモーフィズムの実装
ポリモーフィズムは、メソッドのオーバーライドとメソッドのオーバーロードを通じて実現できます。メソッドの書き換えとは、親クラスの既存のメソッドをサブクラスで再定義して、異なる動作を実現することを指します。メソッドのオーバーロードとは、同じクラス内で複数のメソッドを定義することを指します。メソッドの名前は同じですが、パラメーターの型やパラメーターの数が異なり、異なる動作を実現します。
5.3 ポリモーフィズムの場合
例を使用してポリモーフィズムの概念を説明しましょう。
class Animal:
def sound(self):
pass
class Dog(Animal):
def sound(self):
print("汪汪汪!")
class Cat(Animal):
def sound(self):
print("喵喵喵!")
def make_sound(animal):
animal.sound()
dog = Dog()
cat = Cat()
make_sound(dog) # 输出 "汪汪汪!"
make_sound(cat) # 输出 "喵喵喵!"
上の例では、Animal
という名前のメソッドを持つ という名前の親クラスを定義しましたsound
。Dog
次に、2 つのサブクラスとを作成しCat
、それぞれsound
メソッドをオーバーライドして異なるサウンドを実現します。
型のパラメーターを受け取りmake_sound
、そのメソッドを呼び出す という名前の関数を定義することにより、関数内でさまざまな動物オブジェクトを渡すことによってポリモーフィズムを実現できます。オブジェクトであってもオブジェクトであっても、それらはすべてメソッドに応答し、独自の音を発します。Animal
sound
Dog
Cat
sound
ポリモーフィズムを使用すると、異なるオブジェクトに対して同じ操作を実行する汎用コードを作成できます。これにより、さまざまな種類のオブジェクトをより柔軟に処理できるようになり、コードの再利用性とスケーラビリティが向上します。
まとめ:
ポリモーフィズムはオブジェクト指向プログラミングにおける重要な概念であり、これにより、異なるオブジェクトが同じメソッドに対して異なる応答を行うことができます。メソッドのオーバーライドとメソッドのオーバーロードを通じて、ポリモーフィズムを実現できます。ポリモーフィズムは、コードを記述するためのより柔軟で拡張可能な方法を提供し、コードの再利用性と保守性を向上させます。
結論は
この導入により、Python のオブジェクト指向プログラミングの基本を理解できるようになりました。オブジェクト指向プログラミングは、コードの可読性と保守性を向上させる強力なプログラミング パラダイムであり、カプセル化、継承、ポリモーフィズムなどの機能を提供します。この記事が Python でのオブジェクト指向プログラミングの学習に役立ち、プログラミングの旅がさらに進むことを願っています。