在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__
{}