Pythonを深く理解する(五)
4374 ワード
クラス#クラス#クラス名通常最初のアルファベット大文字 PythonにはC++のような構造関数や解析関数はなく、Pythonには構造関数に似たものが存在し、 Pythonのクラスのベースクラスは、Javaに特別なextendsキーワードがあるわけではありません. Pythonは多重継承をサポートし、カッコで をカンマで区切る 各クラスメソッドの最初のパラメータは、selfと呼ばれるクラスの現在のインスタンスへの参照( selfはC++、Javaのthisの役を演じています.しかしselfは保留字ではなく、命名習慣です. サブクラスから親クラスのメソッドを呼び出す場合はselfパラメータを含む必要があります.ただし、クラスの外部からクラスメソッドを呼び出す場合はselfパラメータに値を指定する必要はありません.
クラスのインスタンス化とゴミ回収 クラスのすべてのインスタンスは、同じdoc stringを共有します. ごみ収集方式、参照カウント さらに -
関数のリロードとメソッドのオーバーライド Javaは、パラメータリストによるリロードをサポートします.つまり、クラスには同名の複数のメソッドがありますが、これらのメソッドは、パラメータの個数が異なるか、パラメータのタイプが異なるかです. 他の言語(PL/SQLなど)は、パラメータ名によるリロードをサポートします.つまり、クラスには同じタイプ、同じ数のパラメータがありますが、パラメータ名は異なります. Pythonでは、関数のリロードはサポートされていません.
Pythonの著者Guido氏は、「サブクラスは親のメソッドを上書きすることができる.メソッドには特別な優先度設定がないため、親のメソッドの1つが同類の別のメソッドを呼び出す場合、実際にはサブクラスで親の同名メソッドを上書きするメソッドが呼び出される可能性がある」と説明している. copyモジュールのcopy関数は、任意のpythonオブジェクトをコピーできます.
プライベートクラス
専用メソッド形式: 特別な場合、または特別な構文を使用する場合、コードで直接呼び出すのではなく、Pythonによって呼び出されます. 例えば 正しい構文で値と戻り値を設定すると、Pythonは を呼び出します.
判断対象の等化 Javaでは、 Pythonでは、 Javaでは、 . Pythonでは、 を判断する.
専用メソッドの意味専用メソッドは、
クラス属性 Javaの静的変数(staticキーワードあり)はPythonのクラス属性に等しい. Pythonでは,クラス属性定義はクラス定義後,データ属性定義は クラス属性は、クラスレベルの定数として使用できますが、実際の定数ではありません.変更できます.
Pythonには定数はありませんが、努力しようとすれば何でも変えられます.この点はPythonの核心原則の一つを満たしている:悪い行為は取り締まるのではなく克服されるべきだ.
プライベート関数 Pythonのプライベート属性とプライベートクラスメソッドは、プライベートである2つの下線で開始されます(ただし、終了ではありません).他のすべては公有です. Pythonの独自の方法と内蔵属性(例えば PythonはC++とは異なり、protectの概念があり、Pythonのクラスメソッドはprivateの(自分のクラスでしか使用できない)、publicの(どこでも使用できる)、protect(つまり自分のクラスとサブクラスで使用される)はありません.
__init__
の方法がある.__init__
とself__init__
は、クラスのインスタンスが作成された直後に呼び出され、クラスの構造関数とは異なる.なぜなら、__init__
を呼び出す前にオブジェクトが構築されているため、クラスの新しいインスタンスに対する有効な参照selfがあります.__init__
を含む)である.__init__
メソッドは、実際にはオプションですが、定義されると、親を呼び出す__init__
メソッドを表示することを覚えておく必要があります(あれば).クラスのインスタンス化とゴミ回収
__class__
は、各クラスのインスタンスにオブジェクトのクラスであるこのような組み込み属性を有する.関数のリロードとメソッドのオーバーライド
__init__
メソッドは、パラメータにかかわらず、クラスごとに__init__
メソッドしかありません.さらに、サブクラスの__init__
メソッドは、親の__init__
メソッドを常に上書きし、サブクラスは異なるパラメータリストで定義することができる.Pythonの著者Guido氏は、「サブクラスは親のメソッドを上書きすることができる.メソッドには特別な優先度設定がないため、親のメソッドの1つが同類の別のメソッドを呼び出す場合、実際にはサブクラスで親の同名メソッドを上書きするメソッドが呼び出される可能性がある」と説明している.
プライベートクラス
専用メソッド
__something__
In: li = {1:1}
In: li[2] = 2
In: li
Out: {1: 1, 2: 2}
In: li.__setitem__(2,3)
In: li
Out:{1: 1, 2: 2, 3: 3}
In: li[1]
Out: 1
In: li.__getitem__(2)
Out: 2
__setitem__
メソッドと__getitem__
メソッドを呼び出します.__repr__
は、repr(instance)が呼び出されると呼び出される専用の方法であり、repr関数はオブジェクトの文字列表現を返す内蔵関数である.__cmp__
は、クラスインスタンスを比較するための専用の方法である.==
を使用してクラスを比較することができます.Pythonはこの専用メソッド——len__
がlen(instance)を再呼び出したときに呼び出されます.lenは、長さが利用されていると考えられる任意のオブジェクトに使用できる組み込み関数です.判断対象の等化
str1 == str2
を使用して、2つの文字列変数が同じ物理メモリ位置を指すかどうかを決定できます.これを対象同一性と呼ぶ.str1 is str2
を使用して、同じ物理メモリ位置を指すか否かを判断する.str1.equals(str2)
により2つの文字列値が等しいか否かを判断するstr1 == str2
を用いて値の等化専用メソッドの意味
__setitem__
メソッドを定義する限り、任意のクラスが辞書のようにキー値ペアを保存できることを意味する.__getitem__
メソッドを定義する限り、任意のクラスはシーケンスのように表現できます.__cmp__
メソッドを定義するクラスは、==
で比較することができる.__len__
メソッドを定義したクラスは、類似の長さのものを持つことができます.__call__
メソッドでは、クラスが関数のように表現され、クラスインスタンスを直接呼び出すことができます.クラス属性
__init__
メソッドである.Pythonには定数はありませんが、努力しようとすれば何でも変えられます.この点はPythonの核心原則の一つを満たしている:悪い行為は取り締まるのではなく克服されるべきだ.
プライベート関数
__doc__
と__setitem__
)は、いずれも標準的な命名習慣を遵守し、開始と終了には2つの下線がある.独自のメソッドは通常、直接呼び出されるのではなく、クラスで正しい構文を使用してPythonを呼び出す.