3

重複の可能性:
Pythonの初期化と自己化は何をしますか?

誰かが何を説明できます__init__(self)か?私は他の質問やスーパークラスについて言及している人々を読んでいますか?スーパークラスとは何ですか?手順は最初から始めることになっていると思いました

def print_word(word):
    print word

__init__(self)アンダースコアと「自己」があるので、ある種の特殊なケースはありますか?特定の用語が不足していることをお詫びします...まだ学習中です。

4

5 に答える 5

9

__init__(self)は、いわゆる「クラス」内で使用される特別な関数です。クラスを使用すると、独自のデータ型/オブジェクトを定義できます。この__init__関数は、定義したデータ型/オブジェクトの新しいインスタンスを作成するたびに呼び出されます。これは、「ねえ、これらのいずれかを作成するたびに、このコードも実行するようにしてください」と言っているようなものです。オブジェクト指向プログラミングでは、この種の関数を「コンストラクター」と呼びます。これは、新しいオブジェクトを「構築」するために使用される関数です。selfは、実際に作成されているオブジェクトへの参照です。つまり、オブジェクトは、関数に到達するまでに技術的にはすでに作成されています__init____init__オブジェクトのさまざまな側面を初期化する機会を与えるだけです(そのため、名前が付けられています__init__)。

Pythonは、関数型、手続き型、およびオブジェクト指向の両方のパラダイムを組み合わせたものです。この__init__ビジネスはオブジェクトと関係があります。オブジェクト指向プログラミングの詳細については、ウィキペディアの記事をご覧ください。

于 2012-07-26T16:35:06.530 に答える
4

__init__Pythonのクラスのコンストラクターです。クラスで括弧で囲まれているメソッドには__、特別な意味があります(構造、演算子の実装など)。

于 2012-07-26T16:35:49.953 に答える
3

重複の可能性:Python __init__とselfは何をしますか?

def print_word(word)関数(またはメソッド/手順)です。クラス__init__(self)内で使用される関数です。

クラスに関するPythonチュートリアルのこのセクション__init__では、関数について説明します。ところで、そのページ全体を読むことを強くお勧めします。

selfクラス自体を参照する単語の任意の選択です。必要に応じて、を使用できますwatermelon。参照:自己の目的は何ですか?

二重アンダースコアでラップされたPythonクラス関数には、特別な意味があります。別の例は__str__です。PEP8(重要なPythonスタイルのドキュメント)のこのセクションでは、Pythonでのアンダースコアの意味について説明します。


スーパークラス:

于 2012-07-26T16:39:42.653 に答える
3

あなたの役割を理解するには、__init__(self, ...)最初にクラスを理解する必要があります。

クラスは基本的にオブジェクトのタイプを定義します。たとえば、Fish動作を定義したい場合は、次の形式から始めることができます。

class Fish:
    def swim(self):
        print "I'm swimming!"
    def breathe(self):
        print "I'm breathing!"

ただし、これはあまり便利なクラスではありません。何がFishできるを定義しているものの、その重さなど、他の重要な品質を保存する方法がわからないFishためです。

原則として、私がFish名前を持っているならf、私はただすることができます

f.weight = 3

Fishしかし、Fish名前付きなど、一部の人のためにそれを行うのを忘れてから、式でg使用しようとするとg.weight、Pythonはあまり満足しません-それはAttributeError不平を言うでしょうFish instance has no attribute 'weight'

これを回避するために、クラスのコンストラクターを定義できます。このコンストラクターは、newが作成されるたびにFish、重みや色などのプロパティを適切なデフォルト値に設定します。Pythonでは、このコンストラクター関数はと呼ばれ__init__ます。クラスで定義している限り、そのクラスの新しいインスタンスが作成されるたびに呼び出されます。

class Fish:
    def __init__(self):
        self.weight = 3
    def swim(self):
        print "I'm swimming!"
    def breathe(self):
        print "I'm breathing!"

クラスに対して定義するすべての関数は、暗黙の引数を取ります。これは通常、とラベル付けされselfます。この最初の引数は、常に関数を呼び出しているインスタンスに設定されます。たとえば、私が呼び出すと

f = Fish()
f.swim()

Pythonは、を作成しFish、それをに入れてから、fを呼び出します。この場合、インの重みは3に設定され、「私は泳いでいます!」という原因になります。印刷する。Fish.__init__(f)Fish.swim(f)Fishf

静的関数selfと呼ばれる、引数を取る必要のないクラス関数を作成できますが、これらは、おそらくしばらくは遭遇しない特定の場合にのみ役立ちます。Pythonのクラス関数は通常、インスタンス関数であり、暗黙的に引数を取ります。self

上記の例では、作成されたすべて のデフォルトの重みが3に設定されていることに注意してください。作成時にの重みFishを指定したい場合はどうなりますか?さて、私たちはいくつかの追加の引数を取るようにFish定義することができます:__init__()

class SuperFish:
    def __init__(self, weight = 3):
        self.weight = weight

weight引数のデフォルト値は3として定義されていることに注意してください。したがって、実際には、重みを指定することはオプションです。代わりに言った場合はdef __init__(self, weight):、重量を指定する必要があります。

これで、次の呼び出しのいずれかを実行できます。

a = SuperFish() # creates a SuperFish with a weight of 3
b = SuperFish(42) # creates a SuperFish with a weight of 42
c = SuperFish(weight = 9001) # creates a SuperFish with a weight of 9001

それがあなたのために物事をクリアすることを願っています:)

于 2012-07-26T16:59:04.110 に答える
0

selfはオブジェクト自体を参照し、その「self」のフィールドを初期化__init__するコンストラクターです。たとえば、フィールドが「name」と「age」のPersonクラスを作成しているとします。では、次のコマンドを実行して、デフォルト名を「Bob」に設定し、年齢を36に設定できます。__init__

def __init__(self):
    self._name = "Bob"
    self._age = 36

これにより、新しいPersonオブジェクトを作成するたびに、デフォルトの名前と年齢が「Bob」と36に設定されます。

于 2012-07-26T16:46:20.343 に答える