Pythonのクラスと民営化の方法

1.独自のクラスを作成します。

オブジェクト指向の最初のステップを学ぶことは、クラスを作成することです。クラスなので、オブジェクト指向の基盤です。Pythonのクラスや他のプログラミング言語(Javaの、C#など)と同様のクラスの、だけでなく、classキーワードを使用する必要があります。実用的な例を以下によるPythonクラスが作成された方法を見て。

これは、通常のクラスを作成し、2つのオブジェクトを作成するには、このクラスを使用して、呼び出しの方法。


1240

図に示すように、プログラムの結果。

1240

上記のコードから、我々は以下の知識ポイントのPythonクラスを理解することができます。

Pythonのクラスは、クラスのキーワードを使用して定義され、直接クラス・キーワードの後ろにクラス名が続きました。

このクラスは、コードのブロックなので、コロン(:)、続いてクラス名に戻ってあります。

このクラスのメソッドは、メソッドと呼ばれるクラスの内部で定義された機能を区別するために、実際に全く同じ方法で定義される関数であるが、クラス内で定義され機能するので、それほど。

私たちは、最初のパラメータは、各メソッドの自己であることを確認することができ、実際には、これをする必要があります。これは、必ずしも(ABCが電話または他の名前することができます)自己のパラメータ名と呼ばれていないが、この方法は、自己のパラメータのようなパラメータの数、最初のパラメータが含まれている場合の方法のいずれかが、少なくとも1つの自己引数を指定する必要があります。メソッドを呼び出すときに、パラメータの値を渡す必要はありません、システムは、オブジェクトのメソッドは、このパラメータを渡す所属となります。この方法は、プロパティ、メソッドなどの呼び出し対象リソース自体のパラメータ内で利用することができます。

自己パラメータが追加した変数名は、Personクラスのプロパティは、外部からアクセスすることが可能です。本実施形態では、name属性PERSON2オブジェクトの値は、正確に同じメソッド呼び出しperson2.setName効果を設定します。

機能を同じように呼び出すクラスの方法を使用してオブジェクトを作成します。Python言語で、Javaのようなパラメータ値(後の章意志詳しく)だけコンストラクタでクラス名を使用して、オブジェクトを作成するために、新しいキーワードを使用する必要はありません。

オブジェクトのメソッドを呼び出す、一つの方法は、オブジェクト変数を介して直接呼び出すことである2つの方法が、存在し、他のクラスのオブジェクトと対応する第1のパラメータ受け渡しメソッドを呼び出す方法です。Person.greet挨拶方法PERSON2オブジェクトを呼び出すために、この例(PERSON2)で使用されます。

如果使用集成开发环境,如PyDev、PyCharm,那么代码编辑器也会对面向对象有很好的支持,例如,当在对象变量后输入一个点(.)后,IDE会为我们列出该对象中所有可以调用的资源,包括方法和属性,如下图所示。

1240

2.方法和私有化

Python类默认情况下,所有的方法都可以被外部访问。不过像很多其他编程语言,如Java、C#等,都提供了private关键字将方法私有化,也就是说只有类的内部方法才能访问私有化的方法,通过正常的方式是无法访问对象的私有化方法的(除非使用反射技术,这就另当别论了)。不过在Python类中并没有提供private或类似的关键字将方法私有化,但可以曲线救国。

在Python类的方法名前面加双下划线(__)可以让该方法在外部不可访问。


1240

如果执行上面的代码,会抛出如下图所示的异常信息,原因是调用了私有化方法method2。

1240

其实“method2”方法也不是绝对不可访问。Python编译器在编译Python源代码时并没有将“method2”方法真正私有化,而是一旦遇到方法名以双下划线(__)开头的方法,就会将方法名改成“ClassNamemethodName”的形式。其中ClassName表示该方法所在的类名,“methodName”表示方法名。ClassName前面要加上但单下划线()前缀。

上記のコードでは、Pythonのコンパイラは、「します方法2」方法「_Personmethod2」と改名されたので、外部の呼び出しは、クラス「方法2」の方法は、例外をスローします。その理由は、「方法2」の方法が民営化されるように投げられなかったが、Pythonのコンパイラは、「方法2」の名前は、「_Personのに変更されたために法2」。私たちはこれらの原理を理解するとき、あなたは「_Personを呼び出すことができます方法2」メソッドを実行するための「方法2」の方法を。


1240

これは、通常の会議MyClassのクラスを作成し、2つのパブリックメソッド(のgetNameとのsetName)及び独自の方法(定義OUTNAMEを)。そして、MyClassクラスのインスタンスを作成し、これらのメソッドを呼び出します。改ざんMyClassクラスをコンパイルするときにPythonのコンパイラを実証するために、本実施形態でも、検査モジュールgetmembersは、MyClassクラスメソッドのすべてのメンバーを取得する機能、およびメソッドの名前を出力し使用します。明らかに、「 OUTNAMEは」「_MyClass__outName」に変更されました。


1240

図に示すように、プログラムの結果。

1240

記載されている名前MyClassのクラスメソッドgetmembers関数からわかるように、「_ MyClassのOUTNAMEが」「にバインドされて OUTNAME」方法、我々はできる「_MyClass 」見OUTNAME「 OUTNAMEは、」かつてのため、別名です某メソッドは、クラス外部の元の名前は使用できません。エイリアスと同じ方法のgetNameとのsetNameメソッドMyClassのクラスと元のメソッドに名前を付け、それが直接呼び出しのgetNameとのsetNameメソッド外であってもよいです。


おすすめ

転載: blog.51cto.com/14246112/2404904