我有一个这样的课程
class Test:
def __init__(self, var):
self.var = var
def test(self):
x = self.var + 2
return x
然后我做一个这样的课
class Test:
def __init__(self, var):
self.var = var
def test(self):
self.x = self.var + 2
return self.x
我知道我可以使用self
在此类的各个实例之间分隔属性值。我的问题是,如果我在一个方法中创建许多实用程序变量(例如x
),是否应该始终使用self
创建它们?
有人能解释以上两个类的行为方式是否不同(如果确实如此)?
答案 0 :(得分:0)
让我们看看两个类之间的区别:
class Test:
def __init__(self, var):
self.var = var
def test(self):
x = self.var + 2
return x
让我们创建一个Test对象:
t = Test(1)
看看我们能做什么
t.var # 1
t.x # Raises AttributeError : no such attribute in the class
t.test() #3
t.x # Still erroring
第二堂课
class Test:
def __init__(self, var):
self.var = var
def test(self):
self.x = self.var + 2
return self.x
让我们创建一个Test对象:
t = Test(1)
看看我们能做什么
t.var # 1
t.x # Raises AttributeError : no such attribute in the class
t.test() #3
t.x # 3
那又怎样?好,我们可以看到用self.VARNAME
定义的任何变量都保留在实例中,而没有self.
的简单局部变量则不会。
但是,如果x需要通过t.x进行访问,我可能会选择一个属性,就像这样
class Test:
def __init__(self, var):
self.var = var
@property
def x(self):
x = self.var + 2
return x
t = Test()
t.x # 3