クラス定義
Pythonでは、クラスの定義はclassキーワードを使用します。たとえば、学生情報を格納するクラスを定義します。
classStudent(object):
pass
クラス名の直後にクラス名、つまりStudentが続きます。通常、クラス名は大文字の単語で、その後に(object)が続き、クラスの継承元を示します。通常、適切な継承クラスがない場合は、オブジェクトクラスが使用されます。これは、すべてのクラスが最終的に継承するクラスです。
Studentクラスを定義した後、Studentクラスに基づいてStudentのインスタンスを作成できます。インスタンスの作成は、クラス名+()によって行われます。
bart =Student()
bart
<__ main__.Student object at 0x10a67a590
Student
< class'__main__.Student'
ご覧のとおり、変数bartはStudentのインスタンスを指し、次の0x10a67a590はメモリアドレスであり、各オブジェクトのアドレスは異なり、Student自体はクラスです。
属性をインスタンス変数に自由にバインドできます。たとえば、名前属性をインスタンスバーにバインドします。
bart.name ='Bart Simpson'
bart.name
' Bart Simpson'
これは、C ++などの静的言語とは異なります。オブジェクトにはいつでも属性を追加できます。
pythonでは、クラスの属性はC ++クラスのメンバー変数と同等であり、クラスのメソッドはC ++クラスのメンバー関数と同等です。
クラスはテンプレートとして機能できるため、インスタンスを作成するときに、バインドする必要があると思われる一部のプロパティを入力する必要がある場合があります。特別なinitメソッドを定義することにより、インスタンスが作成されると、名前やスコアなどの属性がそれにバインドされます。
classStudent(object):
def __init__(self, name, score):
self.name = name
self.score = score
C ++と比較すると、__ init__関数はC ++クラスのコンストラクターと同等です。注:特別なメソッド「init」の前後に2つの下線があります。
initメソッドの最初のパラメーターは常にselfであり、作成されたインスタンス自体を表すことに注意してください。したがって、selfは作成されたインスタンス自体を指すため、initメソッド内でさまざまなプロパティをselfにバインドできます。
initメソッドでは、インスタンスを作成するときに空のパラメーターを渡すことはできません。initメソッドに一致するパラメーターを渡す必要がありますが、selfを渡す必要はありません。Pythonインタープリター自体がインスタンス変数を渡します。
bart =Student('Bart Simpson',59)
bart.name
' Bart Simpson'
bart.score
59
通常の関数と比較すると、クラスで定義されている関数は異なるだけです。つまり、最初のパラメーターは常にインスタンス変数selfであり、呼び出すときにこのパラメーターを渡す必要はありません。さらに、クラスのメソッドは通常の関数と同じであるため、デフォルトのパラメーター、変数パラメーター、キーワードパラメーター、および名前付きキーワードパラメーターを引き続き使用できます。
get_gradeなど、定義したStudentクラスに新しいメソッドを追加できます。
classStudent(object):...
def get_grade(self):if self.score =90:return'A'
elif self.score =60:return'B'else:return'C'
ナレッジポイントの拡張:
ビルドと初期化
私は誰もがこの最も基本的な魔法の方法__init__に精通していると信じています。これにより、オブジェクトの初期化動作をカスタマイズできます。そして、x = SomeClass()を呼び出すと、__ init__が最初に呼び出されるわけではありません。実際、__ new__と呼ばれるメソッドがあります。実際、インスタンスを作成し、作成の目的を達成するために初期化子にパラメーターを渡します。オブジェクトのライフサイクルの終わりに、__ del__が呼び出されます。これらの3つの魔法の方法を詳しく見てみましょう。
__ new__(cls,[…)
オブジェクトがインスタンス化されると、__ new__が最初に呼び出されます。他のパラメータをクラスの__init__に渡します。 __new__はめったに使用されず、特にサブクラスが不変の型(タプルまたは文字列)を継承する場合にその目的があります。 __new__の詳細については、これ以上追求する予定はありません。これは、非常に詳細な説明がPython Docsですでに説明されているため、あまり役に立たないためです。
__ init__(self,[…)
クラスの初期化。最初のビルド呼び出しで渡されたものはすべて取得されます(たとえば、x = SomeClass(10、 'foo')を呼び出すと、__ init__は渡された10と 'foo'をパラメーターとして渡します。init Pythonクラス定義でほぼ普遍的に使用されています)
__ del__(self)
new__と__init__がオブジェクトのコンストラクターである場合、 del__はデストラクターです。 del xとして宣言された動作は実装されていません(このようなコードはx .__ del ()として解釈されません)。代わりに、オブジェクトがガベージコレクションされたときの動作として定義されます。これは、ソケットやファイルオブジェクトなど、追加のクリーンアップが必要なオブジェクトに役立つ場合があります。ただし、オブジェクトがまだ生きていて、解釈が終了したときに del__が実行される保証はないため、このような__del__を適切なコーディング方法の代わりに使用することはできません。 (完了したときと同じように、常に接続を閉じる必要があります。しかし、実際には、__ del__は危険な状況で呼び出されるため、実行されることはほとんどありません。使用するときは注意してください!)
これで、Pythonでクラスを作成する方法に関するこの記事は終わりです。Pythonでクラスを作成するための関連する方法については、ZaLou.Cnを検索してください。
Recommended Posts