在Python中使用self内部实例方法

时间:2018-11-14 19:10:48

标签: python class oop object

我有一个这样的课程

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创建它们?

有人能解释以上两个类的行为方式是否不同(如果确实如此)?

1 个答案:

答案 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