この講義では、Python のクラス、コンストラクタ、および継承について学習します。
これらの概念は、さまざまな型を定義する必要がある大規模なプログラムでは非常に重要です。
クラス
クラスはプログラミングに不可欠であり、Python に固有のものではありません。 他の多くの プログラミング言語 クラスの概念をサポートします。 クラスを使用して、新しいデータ型を定義します。
これまでのところ、数値、文字列、ブール値など、Python の基本的なデータ型について学びました。 これらは、Python の基本データ型または単純データ型です。 リストや辞書などの複雑なデータ型もいくつか見てきました。
これらの型は非常に便利ですが、複雑な概念をモデル化するために常に使用できるとは限りません。 たとえば、ポイントやショッピング カートのアイデアについて考えてみましょう。 ショッピング カートはブール値でもリストでもありません。 違う種類のデータです。 したがって、クラスを使用して新しい型を定義し、実際の概念をモデル化できます。
それでは、point という新しいデータ型を定義しましょう。 この新しい型には、前に確認したようにメソッドがあります。
これはあなたがそれを行う方法です:
「class」キーワードを使用してクラスを定義することから始め、その直後にクラスに名前を付けます。
class Point
ここで、ここで使用した命名規則を見てください。 ここでは最初の文字を大文字にしています。これがパスカル命名規則と呼ばれるものです。 この規則は、常に小文字を使用し、アンダースコアを使用して複数の単語を区切る、変数と関数の名前付けに使用する規則とは異なります。 ただし、クラスの名前を付けるときは、アンダースコアを使用して複数の単語を区切るのではなく、すべての単語の最初の文字を大文字にします。
クラスを定義した後、ブロックが定義されたことを意味するコロンが使用されます。
class Point:
def move (self):
このブロックでは、ポイントに属するすべての関数またはメソッドを定義できます。 たとえば、点を移動するための「move」という関数を定義できます。 左括弧を入力するとすぐに、PyCharm はここに「self」を自動的に追加することに注意してください。 これは特別なキーワードです。これについては後ほど説明します。 端末に「move」と出力してみましょう。
print("move")
「draw」のような別のメソッドを定義して、ターミナルに出力しましょう。
def draw(self):
print("draw")
「ポイント」クラスの定義が完了しました。 この新しいタイプを使用して、新しいオブジェクトを作成できます。 クラスは、その設計図に基づく実際のインスタンスであるオブジェクトを作成するための設計図またはテンプレートを定義するだけです。 オブジェクトを作成するには、クラスの名前を入力し、関数のように呼び出します。 これにより、新しいオブジェクトが作成され、それが返されます。 次に、そのオブジェクトを変数に格納できます。 披露させて:
ここでは、1 次元の点である「pointXNUMX」を定義しました。 ご覧のとおり、端末に個々の座標を出力できます。
この時点で、「描画」と「移動」の XNUMX つの方法を使用できます。
要約すると、クラスを使用して新しい型を定義します。これらの型は、クラスの本体で定義したメソッドを持つことができます。 クラスは、プログラムのどこにでも設定できる属性を持つことができます。
コンストラクター
これまで、クラスを使用して新しい型を作成する方法を学びました。 この実装には小さな問題があります。 クラスを使用して x または y 座標なしでポイント オブジェクトを作成できますが、これは理想的ではありません。 披露させて。
x座標を設定する前に、ポイントを作成して印刷しましょう。 プログラムを実行すると、次のような属性エラーが発生します。
これは、ポイント オブジェクトに x という属性がないことを意味します。 ここでの問題は、x 座標または y 座標を持たない点オブジェクトが存在する可能性があることです。 ポイントについて話すときはいつでも、そのポイントがどこにあるかを知る必要があるため、これは意味がありません。 この問題を解決するために、コンストラクターを使用します。 コンストラクターは、オブジェクトの作成時に呼び出される関数です。
コンストラクタを使用する方法は次のとおりです。 まず、上記のプログラムに x 座標と y 座標の値を渡します。
point = Point(10, 20)
print(point.x)
ここで、このクラスにコンストラクターと呼ばれる特別なメソッドを追加する必要があります。 その構文は次のようになります。
def __init__(self, x, y):
init
は初期化の略で、これは新しいポイント オブジェクトが作成されたときに呼び出される関数またはメソッドです。 x と y は直後に追加されます self
XNUMX つのパラメータを追加します。
その後、x と y を渡された値、つまり 10 と 20 にマップする必要があります。
self.x = x
self.y = y
私たちは、使用 self
現在のオブジェクトを参照するには、関数「x」に渡される x 引数に x 属性を設定します。 このように、 init
メソッドで、オブジェクトを初期化できます。 このメソッドはコンストラクターと呼ばれます。 プログラムを実行してみましょう。
これで、後で x 座標と y 座標を変更できます。 x座標を更新しましょう:
point = Point(10, 20)
point.x = 11
print(point.x)
ここで、x 座標が値 11 に更新されます。
運動
ここにあなたのための興味深い練習があります。
人という新しいタイプを定義してほしい。 これらの「Person」オブジェクトには「name
” 属性と同様に “talk()
" 方法。
これは単純な作業であり、数分以上かかることはありません。
ソリューション
次のようにクラス「Person」を定義することから始めます。
class Person:
self.name = name
コンストラクタは後で定義します。 これで、「Person」オブジェクトを作成できます。 ジョンと呼ぼう
john = Person("John Smith")
print(john.name)
john.talk()
次に、コードの最初の部分に進み、コンストラクターを作成します。
def __init__(self, name):
最終的なコードは次のようになります。
クラスやコンストラクターと組み合わせて、書式設定された文字列やその他の概念を使用することもできます。
継承
継承は、コードを再利用できるクラスに関連付けられた別の概念です。
このコードを考えてみましょう。
class Dog:
def walk(self):
print("walk")
「walk」メソッドを持つクラス「Dog」を作成しました。 このメソッドでは、単純に walk メッセージを端末に出力しています。 たとえば、実際のプログラムでは、10 行ではなく XNUMX 行のコードがあるとします。 将来、「walk」メソッドを持つ別のクラスが必要になった場合、そのコードをすべて繰り返す必要があります。 これは理想的ではありません。
プログラミングには DRY と呼ばれる原則があります。これは don't repeat yourself の略です。 将来のある時点で、「ウォーク」メソッドの問題を発見し、このメソッドを他の多くの場所で繰り返したり複製したりした場合、これを複製したすべての場所で戻ってその問題を修正する必要があるとしましょう。コード。 そのため、プログラミングでは何かを XNUMX 回定義してはなりません。
この問題を解決するにはさまざまなアプローチがありますが、ここでは初心者にとってより簡単な継承と呼ばれる方法を学びます。 この場合、別のクラス「哺乳類」を作成し、そのクラスで「散歩」属性を定義します。
class Mammal:
def walk(self):
print("walk")
「哺乳動物」クラスを定義した後、継承を使用して次のように属性を渡すことができます。
犬と猫の両方のクラスは、親クラスで定義されたすべてのクラス メソッドを継承しています。 これで、次のように犬に固有のメソッドを追加できます。
class Dog:
def bark(self):
print("bark")
要約!
これはすべて、クラス、コンストラクター、および継承の概念を持つクラスでのコードの再利用に関するものでした。 今、私たちはシリーズの終わりに近づいています. この時点で、Python で適切で読みやすく簡潔なコードを生成できるはずです。
モジュールとパッケージの概念については、次の講義で説明します。
コメントを残す