在Python中声明实例变量的两种方法?

在Python中声明实例变量的两种方法?,python,instance-variables,Python,Instance Variables,两者在功能和幕后发生的事情上有什么不同吗 class Class: def __init__(self, var1): self.var1 = var1 及 在Python中?正如我在评论中指出的,Class.var1是一个共享变量。如果不在_init__中使用非共享变量擦除它,则可以将每个实例访问为self.var1。以下是发生的情况的示例: class Test(object): shared = 0 def __init__(self, i):

两者在功能和幕后发生的事情上有什么不同吗

class Class:
    def __init__(self, var1):
        self.var1 = var1


在Python中?

正如我在评论中指出的,Class.var1是一个共享变量。如果不在_init__中使用非共享变量擦除它,则可以将每个实例访问为self.var1。以下是发生的情况的示例:

class Test(object):
    shared = 0
    def __init__(self, i):
        self.notshared = i
    def intro(self):
        print("Shared is " + str(self.shared))
        print("NotShared is " + str(self.notshared))

test1 = Test(4)

test1.intro()
# Shared is 0
# NotShared is 4

Test.shared = 5
test1.intro()
# Shared is 5
# NotShared is 4

test2 = Test(3)
test2.intro()
# Shared is 5
# NotShared is 3
但是,请注意,如果您随后编写了
self.shared
变量,则不再使用
self.shared
访问共享变量:

test1.shared = 12
test1.intro()
# Shared is 12
# NotShared is 4
test2.intro()
# Shared is 5
# NotShared is 3

让我们探索一下。这是你们班:

class Class:
    var1 = 'in class'
    def __init__(self, var1):
        self.var1 = var1

c = Class('in inst')
访问
c.var1
显示实例中的
var1

>>> c.var1
'in inst'
它位于
c
\uuuuuu dict\uuuuu
内:

>>> c.__dict__
{'var1': 'in inst'}
类变量
var1
位于
类的
目录中:

>>> Class.__dict__['var1']
'in class'
现在,创建一个只包含一个类变量的类:

class Class2:
    var1 = 'in class'

c2 = Class2()
由于实例中没有任何内容,因此将使用类中的
var1

>>> c2.var1
'in class'
c2
\uuuuuuuuuuuuuuuuuuuuuuuuu
为空:

>>> c2.__dict__
{}

Python总是首先在实例中查找
var1
,然后返回类

我认为第二个选项声明了一个Class.var1变量,它在所有实例之间共享数据。
>>> c2.__dict__
{}