2017-11-02 23 views
0

私は、Pythonのインスタンスとクラスの属性について学んでいます。次に少し混乱します:this_obj.varはインスタンス属性ですか、それはclass属性に属しています。コードは次のとおりですインスタンス属性とクラス属性の相違点

class Myclass (object): 
    var = 10 

this_obj = Myclass() 
this_obj.somevar = 12 
that_obj = Myclass() 
that_obj.somevar = 12 
+2

[Python:クラス属性とインスタンス属性の相違]の可能な複製(https://stackoverflow.com/questions/207000/python-difference-between-class-and-instance-attributes) –

答えて

2

インスタンスとクラスの属性は、最初は分かりにくいものです。 それについて考えている最善の方法は、その名前に注意を払うことです。

インスタンス属性はクラスの特定のインスタンスによって所有されます。つまり、これらの属性は特定のクラスのインスタンスごとに異なる場合があります。

一方、クラス属性はクラス自体によって所有されているため、属性は特定のクラスの各インスタンスに対して同じ値を持ちます。

例では、varは、すべてのインスタンスのクラス属性です(MyClass)。ただし、varが特定のインスタンス(たとえばthis_obj.var = 69)に対して異なる値に設定されると、this_obj.varthis_objインスタンスのインスタンス属性になります。意味、インスタンス属性は、インスタンスのクラス属性を変更するときに作成されます。

希望に役立ちます!

EDIT:クラス属性値自体も変更できます。つまり、その特定の変数のインスタンス属性を持たないすべてのインスタンスに対して変更されます。たとえば、MyClass.var = 34は、インスタンス属性をまだ作成していないMyClassのすべてのインスタンスの値を変更します。

関連する問題