MyModHeaven 发表于 2022-11-25 15:09

PyQt5 的ui文件转为py文件,代码里关于面向对象的问题



如图,这是ui文件转成py文件的代码, setupUi 函数里的控件都加上了 self ,那么这些控件是 Ui_Form 类的实例属性吗?如果不是实例属性的话,那这些又算什么,只是单纯的变量吗,加 self 和不加有什么区别?

johnMC 发表于 2022-11-25 15:30

按照我个人理解,就是实例属性跟__init__类型,如果不加,多个实例声明时会出现变量覆盖,导致控件混乱:Dweeqw

XyD3 发表于 2022-11-25 15:57

加了self就是相当于把这些变量绑定到实例化对象,如果不加的话,就是相当于它只是某个函数内的局部变量,在外面就访问不了了

冬酒暖阳 发表于 2022-11-25 16:43

本帖最后由 冬酒暖阳 于 2022-11-25 16:46 编辑

self 指的是实例对象本身,前面加 self 就相当于把这个变量放到对象身上,如果不加的话在执行完 setupUi 函数之后,这些没有被其他地方使用的变量就会成为垃圾,会被 python 的垃圾回收器回收释放内存空间,等于说他只在 setupUi 这个函数执行的过程中存在,setupUi 执行结束后就被销毁了,就是这个 setupUi 方法的局部变量。而前面加上 self 就是将变量绑定到对象身上,它就成为了对象自己的实例属性,在 setupUi 执行结束之后,也不会被销毁。只有当这个对象也不再使用的时候,才会连同对象一起被销毁释放

cloud2010 发表于 2022-11-25 17:09


加self是实例属性,可以在类内部以self加点形式访问该属性,类在应用中被实例化成对象后,可以通过对象名加点的形式访问该属性

不加self是函数的局部变量,函数结束后就不存在了

E式丶男孩 发表于 2022-11-25 17:16

你看赋初值的时候啊,把对应类型的实例绑定到class的成员变量上去了

用温柔将我杀死 发表于 2022-11-25 19:19

本帖最后由 用温柔将我杀死 于 2022-11-26 20:50 编辑

好东西学习了
页: [1]
查看完整版本: PyQt5 的ui文件转为py文件,代码里关于面向对象的问题