オブジェクト指向の詳細

高洛峰
高洛峰オリジナル
2016-10-19 11:14:421179ブラウズ

私たちはオブジェクトとクラスの基本概念を理解しています。実際にオブジェクトやクラスを使えるようにさらに拡張していきます。

呼び出しクラスに関するその他の情報

前の講義で述べたように、メソッドを定義するときは、self パラメータを含める必要があります。このパラメータはオブジェクトを表します。オブジェクトにはクラスのすべてのプロパティがあるため、self を通じてクラス属性を呼び出すことができます。

class Human(object):
    laugh = 'hahahaha'
    def show_laugh(self):
        print self.laugh
    def laugh_100th(self):
        for i in range(100):
            self.show_laugh()
li_lei = Human()          
li_lei.laugh_100th()

ここにはクラス属性の笑いがあります。 show_Laugh() メソッドでは、この属性の値は self.Laugh を通じて呼び出されます。

同じ方法で他のメソッドを呼び出すこともできます。メソッド show_Laugh(), () はメソッド Laugh_100th で呼び出されます。

クラス属性値はオブジェクトを通じて変更できます。しかし、これは危険です。クラス属性は、同じクラスとそのサブクラスのすべてのオブジェクトで共有されます。クラス属性値の変更はすべてのオブジェクトに影響します。

__init__() メソッド

__init__() は特別なメソッドです。 Python には特別なメソッドがいくつかあります。 Python はそれらを特別に扱います。特殊なメソッドは、名前の前後に 2 つのアンダースコアがあることが特徴です。

クラスで __init__() メソッドを定義すると、Python はオブジェクトの作成時にこのメソッドを自動的に呼び出します。このプロセスは初期化とも呼ばれます。

class happyBird(Bird):
    def __init__(self,more_words):
        print 'We are happy birds.',more_words
summer = happyBird('Happy,Happy!')

ここでは Bird クラスが継承されており、その定義は前の講義で示されています。

画面に印刷します:

We are happy Birds.Happy,Happy!

Summer オブジェクトを作成したばかりですが、__init__() メソッドが自動的に呼び出されていることがわかります。ステートメントの最後の行 (Summer = happyBird...) は、最初にオブジェクトを作成してから次を実行します:

Summer.__init__(more_words)

'Happy, Happy!' は __init__() のパラメータ more_words

オブジェクトに渡されます。

のプロパティ 多くの属性について説明しましたが、これらの属性はクラスの属性です。このクラスに属するすべてのオブジェクトはこれらのプロパティを共有します。たとえば、鳥にはすべて羽毛がありますが、ニワトリは飛ぶことができません。

場合によっては、オブジェクトに関する特別な情報を記録するためにオブジェクトのプロパティを定義します。たとえば、人間のカテゴリ。性別は人の所有物であり、すべての人間が男性または女性であるわけではありません。このプロパティの値はオブジェクトごとに異なります。リー・レイは男性の性別を持つ人間のオブジェクトであり、ハン・メイメイも女性の性別を持つ人間のオブジェクトです。

クラスメソッドを定義するときは、self パラメータを渡す必要があります。このパラメータは、クラスのオブジェクトを参照します。 self を操作することでオブジェクトのプロパティを変更できます。たとえば、クラスを使用して新しいオブジェクト (次の例では li_lei) を作成する場合、li_lei は self で表されます。 self.attribute に値を割り当てることで、男性と女性の性別などのいくつかのプロパティをオブジェクト li_lei に追加します。 self は各メソッドに渡されます。メソッド内で、self.attribute を参照することで、オブジェクトのプロパティをクエリまたは変更できます。

このように、クラス属性に加えて、各オブジェクトには独自の固有のプロパティが与えられ、さまざまな世界を記述することができます。

class Human(object):
    def __init__(self, input_gender):
        self.gender = input_gender
    def printGender(self):
        print self.gender
li_lei = Human('male') # 这里,'male'作为参数传递给__init__()方法的input_gender变量。
print li_lei.gender
li_lei.printGender()

初期化では、パラメータ input_gender をオブジェクトのプロパティ、つまり self.gender に割り当てます。

li_lei にはオブジェクトプロパティの性別があります。性別はクラスの属性ではありません。 Python はオブジェクト li_lei を作成した後、オブジェクト プロパティ li_lei.gender を使用して、オブジェクト li_lei に属する一意の情報を具体的に保存します。

オブジェクトのプロパティは、他のメソッドからも呼び出すことができます。呼び出しメソッドは、printGender() メソッドの呼び出しと同様に、クラス属性の呼び出しに似ています。

概要

selfを通してクラス属性を呼び出す

__init__(): オブジェクト作成時に自動的に実行

クラス属性とオブジェクトのプロパティの違い


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。