我有一堂这样的课
class Test:
def __init__(self, var):
self.var = var
def test(self):
x = self.var + 2
return x
然后我做了一个这样的类(class)
class Test:
def __init__(self, var):
self.var = var
def test(self):
self.x = self.var + 2
return self.x
我知道我可以使用 self
在此类的各个实例之间分隔属性值。我的问题是,如果我在方法内创建许多实用程序变量(例如 x
),我是否应该始终使用 self
创建它们?
谁能解释一下上面两个类的行为有何不同(如果有的话)?
最佳答案
让我们看看这两个类之间的区别:
class Test:
def __init__(self, var):
self.var = var
def test(self):
x = self.var + 2
return x
让我们创建一个测试对象:
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
让我们创建一个测试对象:
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
关于python - Python 中实例方法内部 self 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53307214/