功能上有什么不同,以及
之间的幕后发生了什么class Class:
def __init__(self, var1):
self.var1 = var1
和
class Class:
var1 = ""
def __init__(self, var1):
self.var1 = var1
在Python中?
答案 0 :(得分:4)
让我们探讨一下。这是你的班级:
class Class:
var1 = 'in class'
def __init__(self, var1):
self.var1 = var1
c = Class('in inst')
访问c.var1
会显示实例中的var1
:
>>> c.var1
'in inst'
它位于__dict__
的{{1}}内:
c
类变量>>> c.__dict__
{'var1': 'in inst'}
位于var1
的{{1}}中:
__dict__
现在创建一个只有类变量的类:
Class
由于实例中没有任何内容,因此将使用该类中的>>> Class.__dict__['var1']
'in class'
:
class Class2:
var1 = 'in class'
c2 = Class2()
var1
的{{1}}为空:
>>> c2.var1
'in class'
Python总是先在实例中查找__dict__
,然后再回到类中。
答案 1 :(得分:2)
正如我在评论中指出的,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