作成されたインスタンスごとに 1 回だけ実行されるため__init__
(明示的に呼び出された場合、"決して" と見なされることはめったにありません)。1 つのインスタンスを作成して 1__init__
回実行し、3 つのインスタンスを作成して__init__
3 回実行します。を呼び出すたびB()
に、新しいインスタンスを作成します。
x
また、クラス属性、y
、および__z
は、クラスのインスタンスではなく、クラス自体に属していることに注意してください。やっているときにそれらを参照するself
ことは、問題を引き起こすクラスとインスタンスの違いについての明らかな誤解から生じる別の問題です。
クラスは、オブジェクトの定義と考えることができます。クラス ( ) を呼び出すと、B()
そのインスタンスが作成されます。クラス属性は定義自体に属し、インスタンス属性はオブジェクトに属します。
クラスはプレス機の金型のようなものだと考えてください。車のフェンダーを作るための金型があると想像してください。各フェンダーはオブジェクト インスタンスです。各フェンダーには、インスタンス アトリビュートである色があります。ただし、サイコロ自体も色を持つことができ、それはクラス属性になります。各バンパーは異なる色を持つことができ、他のフェンダーやダイスの色を変更することなく、任意のフェンダーの色を変更できますが、フェンダーをいくつ作成してもダイスは 1 つしかなく、ダイスは 1 つしかありません。色。
>>> class Fender(object):
... color = 'red'
... def __init__(self):
... self.color = None
...
>>> fenders = [Fender(), Fender()]
>>> Fender.color
'red'
>>> fenders[0].color = 'blue'
>>> fenders[1].color = 'grey'
>>> fenders[0].color
'blue'
>>> fenders[1].color
'grey'
>>> Fender.color
'red'
>>> fenders[0].__class__.color
'red'
>>> Fender.color = 'black'
>>> fenders[0].color
'blue'
>>> fenders[1].color
'grey'
>>> Fender.color
'black'
>>> fenders[0].__class__.color
'black'