self.var和类中的var之间有什么区别吗? 例如:
class nameClass:
def names(self):
self.name1 = "aaaa"
name2 = "bbbb"
def printNames(self):
print self.name1
print name2
现在如果我实例化该类并且我想使用name2变量,它就不会让我。
obj1 = nameClass()
obj.printNames()
它会打印name1但是对于name2,它会显示:
NameError: global name 'name2' is not defined
所以我假设我们在一个方法中使用的变量最好不要使用' self' 但对于我们想要稍后修改的其他变量或将其传递给其他方法,最好使用' self'。
还有其他区别吗?!
答案 0 :(得分:6)
class Foo:
name1 = 'class variable'
def __init__(self):
self.name2 = 'instance variable'
name3 = 'local variable'
def test(self):
print self.name1 # ok
print self.name2 # ok
print name3 # no
以下是相关帖子:Static class variables in Python
答案 1 :(得分:2)
name2 = "bbbb"
变量只是方法names
的本地变量。在您将其设置为names
方法的末尾后,名称将会显示。
但是使用self.name1 = "aaaa"
,您将为您的类实例self添加一个属性,这将属于您的self
实例的其他方法。
因此,对于您必须在类中存储更长时间的任何数据,使用self.xyz
,并且需要在方法之间访问,并在单个方法中使用xyz
作为临时变量。
Offtopic:在使用之前,请小心初始化每个局部变量。如果你没有,你可以在较低级别拥有一个同名的(全局)变量,而你会使用它的值,而你的代码会搞乱。
在使用self
之类的属性时也要小心,不要忽略name1
,因为您可以再次使用全局变量name1
,而是在类方法中读取它。
说明这些令人讨厌的错误:
def test():
# forgot to initialize constant/variable x
print x
x = 1
test()
class CTest:
def __init__(self):
self.x = 5
def wrongx(self):
print x
t = CTest()
t.wrongx()
此测试的输出将为:
1
1