あなたの役割を理解するには、__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)
Fish
f
静的関数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
それがあなたのために物事をクリアすることを願っています:)