bud 发表于 2021-2-7 10:14:17

python 类中,属性是否加self的区别

如下图所示,小甲鱼在tkinter 课上讲的例子,为什么 frame 没有加self 而hi_there 加了self?

小甲鱼的铁粉 发表于 2021-2-7 10:27:57

加self的都是类中的成员变量,不加的话就是init函数里面的临时变量
举个例子吧
class test:
    def __init__(self):
      self.a = 1
      b = 2
    def ceshi(self):
      print(self.a)
      print(b)

test1 = test()
test1.ceshi()

这段代码中,a加了self,它是class的成员变量,而b只是init函数的局部变量,看运行结果
================= RESTART: C:\Users\86188\Desktop\HelloWorld.py ================
1
Traceback (most recent call last):
File "C:\Users\86188\Desktop\HelloWorld.py", line 10, in <module>
    test1.ceshi()
File "C:\Users\86188\Desktop\HelloWorld.py", line 7, in ceshi
    print(b)
NameError: name 'b' is not defined
能够输出a,但是b是找不到的

bud 发表于 2021-2-7 11:18:11

小甲鱼的铁粉 发表于 2021-2-7 10:27
加self的都是类中的成员变量,不加的话就是init函数里面的临时变量
举个例子吧



谢谢,你说的我明白了,可是为什么在我的那段代码中,frame要用局部变量而button要用成员变量呢?

dingtian1989 发表于 2021-2-7 16:40:16

bud 发表于 2021-2-7 11:18
谢谢,你说的我明白了,可是为什么在我的那段代码中,frame要用局部变量而button要用成员变量呢?

这个例子中没有实际应用意义,可以都加,也可以不加 。
具体项目中, 需要看变量适用范围,不建议定义大量类全局变量,本着最小化原则定义变量作用域。

bud 发表于 2021-2-8 09:51:37

dingtian1989 发表于 2021-2-7 16:40
这个例子中没有实际应用意义,可以都加,也可以不加 。
具体项目中, 需要看变量适用范围,不建议定义大 ...

好的,谢谢!
页: [1]
查看完整版本: python 类中,属性是否加self的区别