在类方法中声明新变量

2024-10-02 22:28:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚读到Python中的类和方法变量,我想知道这两个例子之间是否有区别:

class Example(object):
    def __init__(self, nr1, nr2):
        self.a = nr1
        self.b = nr2

    def Add(self):
        c = self.a + self.b
        return c

class Example2(object):
    def __init__(self, nr1, nr2):
        self.a = nr1
        self.b = nr2

    def Add(self):
        self.c = self.a + self.b
        return self.c

基本上,如果我这样做了:

print Example(3,4).Add()
print Example2(3,4).Add()

我得到了同样的结果:

7
7

所以我的问题是:

  1. self.c = self.a + self.bc = self.a + self.b有什么区别?
  2. 所有在类内声明的新变量都应该用self语句声明吗?

谢谢你的帮助!


Tags: selfadd声明returnobjectinitexampledef
3条回答

实际上self.c是一个实例变量(在方法中用定义),而c是一个在类(垃圾收集器)中具有有限作用域的局部变量。不同的是,其他方法或类对象可以先调用self.add()方法来查看self.c,该方法可以初始化self.c实例变量,另一方面,任何其他方法都无法访问c

class Example(object):
    def __init__(self, nr1, nr2):
        self.a = nr1
        self.b = nr2

    def Add(self):
        c = self.a + self.b
        return c

假设我们创建一个实例x=Example()。

如果我们试图用x.c访问c。我们会得到以下错误

AttributeError:“Example”对象没有属性“c”。

不同之处在于,在第二个示例中,您存储添加到对象变量c的结果。在第一个示例中,c位于方法内部,因此不能是类变量,因为它是在调用Add方法时实例化的,而不是在定义类时实例化的。

方法中的变量应该用self编写,如果您想存储它们的话。一个局部的,不重要的变量可以写在一个方法中,就像你在c的例子中所做的那样

相关问题 更多 >