0

pythonはクラスとインスタンスレベルの変数をどのように認識しますか? 彼らは違うのですか?

For example,

class abc:
    i = 10
    def __init__(self, i):
        self.i = i


a = abc(30)
b = abc(40)
print a.i
print b.i
print abc.i

output
--------
30
40
10

上記の例では、アクセスa.i (or b.i) したときにabc.i完全に異なる変数を参照していますか?

4

3 に答える 3

2

上記の例で、ai (または bi) と abc.i にアクセスすると、それらは完全に異なる変数を参照していますか?

はい。

abc.i はクラス オブジェクト参照です。

ai と bi は、それぞれインスタンス オブジェクトの参照です。

それらはすべて個別の参照です。

于 2013-08-08T04:01:59.837 に答える
2

まず、あなたのサンプルは間違っています__init__

>>> class abc:
...     i = 10
...     j = 11
...     def __init__(self, x):
...             self.i = x

次に、インスタンスの属性にアクセスすると、最初にインスタンス変数がチェックされます。ここの段落を 参照. ご想像のとおり:

>>> a = abc(30)
>>> a.i
30
>>> a.j
11

さらに、クラス変数はすべてのインスタンスによって共有されるオブジェクトであり、インスタンス変数はインスタンスによって所有されます。

>>> class abc:
...     i = []
...     def __init__(self, x):
...             self.i = [x]
...             abc.i.append(x)
... 
>>> a = abc(30)
>>> b = abc(40)
>>> a.i
[30]
>>> b.i
[40]
>>> abc.i
[30, 40]
于 2013-08-08T04:03:22.087 に答える