[3-1]高度なPythonのクラスとインスタンス|クラスのインスタンスを定義し、作成/プロパティ/属性インスタンスの初期化のインスタンスを作成します

定義したクラスのインスタンスを作成します。1.

Pythonでは、クラス別のクラスは、キーワードを定義しました。次のように人には、例えば、Personクラスが定義されました:

 class Person(object):
     pass

Pythonプログラミング慣行に従って、クラス名、クラスは、クラスダウンから継承され表す(オブジェクト)、続いて、大文字で始まります。クラス継承は、今はただ単にオブジェクトクラスから継承する必要があり、後の章で説明します。

Personクラスの定義を使用すると、xiaohongなど、具体的な例を暁明を作成することができます。)クラス名+(のインスタンスを作成し、同様のフォームを作成するための関数呼び出し:

xiaoming = Person()
xiaohong = Person()

タスク:

Personクラスの定義を練習し、2つのインスタンスを作成し、インスタンスを印刷した後、2つのインスタンスが等しい比較してください。

コード:

class Person(object):
    pass

xiaoming = Person()
xiaohong = Person()

print xiaoming
print xiaohong
print xiaoming == xiaohong

ここに画像を挿入説明

2、インスタンスのプロパティを作成

あなたはなど、Personクラスによってxiaohong、インスタンス暁明を作成するのではなく、別のアドレスにこれらのインスタンスの空想のほか、ない他の違いすることができますが。
現実の世界では、暁明の区別は、自分の名前、性別、生年月日、その他の属性に依存するxiaohong。

Pythonは、各インスタンスのために、それが直接彼らの特性のために、例えば、このインスタンスプラス名前、性別、誕生属性を暁明に割り当てることができ、動的言語なので。

xiaoming = Person()
xiaoming.name = 'Xiao Ming'
xiaoming.gender = 'Male'
xiaoming.birth = '1990-1-1'

Xiaohong暁明として必ずしも同じ属性を追加していないために:

xiaohong = Person()
xiaohong.name = 'Xiao Hong'
xiaohong.school = 'No. 1 High School'
xiaohong.grade = 2

属性の例としては、通常の変数と同じように動作させることができます。

xiaohong.grade = xiaohong.grade + 1

タスク:

名前の順番に従って、その後、2つの例を指名するPersonクラスと代入の2つのインスタンスを含むリストを作成します。

コード:

class Person(object):
    pass

p1 = Person()
p1.name = 'Bart'

p2 = Person()
p2.name = 'Adam'

p3 = Person()
p3.name = 'Lisa'

L1 = [p1, p2, p3]
L2 = sorted(L1, lambda p1, p2: cmp(p1.name, p2.name))

print L2[0].name
print L2[1].name
print L2[2].name


図3に示すように、インスタンスの属性を初期化します

私たちはさまざまな属性を結合する例を与えるために自由ですが、しかし、現実の世界で、財産の一つのタイプの例は、同じ名前を持つ必要があります。例えば、Personクラスは、単にどのように行う、それが作成されたときに名前、性別、誕生属性を持っている必要がありますか?

Personクラスを定義するときにインスタンスを作成するとき、あなたは、特別なPersonクラスの__init __()メソッドを追加することができ、INIT、我々は次の属性を追加統一各インスタンスをここですることができ、()メソッドが自動的に呼び出されました:

class Person(object):
    def __init__(self, name, gender, birth):
        self.name = name
        self.gender = gender
        self.birth = birth

INIT最初のパラメータ()メソッドは、(あなたはまた、別の名前を使用することができますが、それは使用のイディオムに推奨されます)自己である必要があり、フォローアップのパラメータは自由に任意の区別なく関数を指定して定義することができます。

したがって、あなたがインスタンスを作成し、自分以外のパラメータを提供することが必要です。

xiaoming = Person('Xiao Ming', 'Male', '1991-1-1')
xiaohong = Person('Xiao Hong', 'Female', '1992-2-2')

各Personインスタンスを作成するときに__init __()メソッドでは、オペレータのアクセスプロパティを使用して、名前、性別を持っており、これらの3つのプロパティを出産し、異なる属性値が割り当てられています
(ポイント)

print xiaoming.name
# 输出 'Xiao Ming'
print xiaohong.birth
# 输出 '1992-2-2'

この方法は、多くの場合、自己の引数を忘れて)初心者(__ __initを定義し、それに特別な注意を払ってください:

>>> class Person(object):
...     def __init__(name, gender, birth):
...         pass
... 
>>> xiaoming = Person('Xiao Ming', 'Male', '1990-1-1')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() takes exactly 3 arguments (4 given)

第1のパラメータ名は、Pythonインタプリタに導入されたため、作成または障害におけるこの結果は、適切に機能していない全くの全体メソッド呼び出しのパラメータの先頭位置の例を挙げました。

タスク:

__init__メソッドは、名前、性別、誕生を受け入れるようにするだけでなく、任意のキーワード引数を受け入れるために、すべてのインスタンスに割り当てられた属性としてそれらを置くだけでなく、Personクラスを定義してください。

コード:

キーワードパラメータ、**キロワットを定義するには、

直接self.nameに加えて、=「XXX」属性を設定するだけでなく、SETATTR(自己、「名前」、「XXX」)、設定されたプロパティによって。

class Person(object):
    def __init__(self, name, gender, birth, **kw):
        self.name = name
        self.gender = gender
        self.birth = birth
        for k, v in kw.iteritems():
            setattr(self, k, v)

xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student')

print xiaoming.name
print xiaoming.job
公開された20元の記事 ウォンの賞賛0 ビュー395

おすすめ

転載: blog.csdn.net/yipyuenkay/article/details/104492039