gpt4 book ai didi

python - 我应该使用 "self"来定义不需要从外部访问的类实例化变量/对象吗?

转载 作者:太空狗 更新时间:2023-10-29 22:08:13 24 4
gpt4 key购买 nike

我不是一个完全的初学者,但对 Python 还是个新手。今天在做一个项目时,我有一个想法,想知道“self”的用法;关于我过去一段时间一直在阅读的内容,我仍然无法弄清楚它是否总是必要的。我的问题仅涉及类实例和实例参数/变量。 这个问题不是关于影响所有实例的类变量

示例:

class C:
def __init__(self, parent = None):
super(C, self).__init__(parent)
self.some_temp_var = AnotherClass()
self.important_property = self.some_temp_var.bring_the_jewels()

ins_c = C()
print ins_c.important_property

在上面的代码中,我在两个变量声明(some_temp_varimportant_property)之前都使用了self

稍后需要从外部(创建实例的地方)访问 **important_property**,甚至可能修改它。

但我不需要访问 AnotherClass() 的实例和/或指向它的变量 (some_temp_var)。我只需要它类的一个实例一次,我只需要执行一次它的方法 bring_the_jewels 来填充 important_property 的值。

在声明该变量之前我还应该使用 self 吗?

self.some_temp_var = ....
self.important_property = ....

或者可以是:

some_temp_var = ....
self.important_property = ....

感谢您的帮助。

附言。我做了很长的研究。由于缺乏我的英语和/或 CS 知识,我可能没有找到当前存在的重复项,但是我进行了搜索,并且搜索了很多次。在称这个问题为“重复”或“无建设性”之前,请通读一遍。这是一个有明确答案的问题,是一件很重要也很复杂的事情。感谢您的理解。

最佳答案

如果您不使用 self.some_temp_var,那么您将定义一个局部变量,该变量将在构造函数之后被垃圾回收。

所以是的,如果你想定义一个实例属性,你需要self。无论您需要它是公共(public)的还是私有(private)的,都是命名的问题。用 _ 前缀表示 protected 或用 __ 表示私有(private)。

如果 some_temp_var 只是构造函数的一个临时变量,并且您再也不需要它,那么不,您不需要 self。它是关于持久性和成员属性的。您不需要 self 因为在单个方法中使用变量这一纯粹的事实。

考虑一下...如果 some_temp_var 是您构建的某个巨大数据结构以获取实际结果值会怎么样?您不想使用 self 来存储临时变量,因为它不会释放内存,直到您删除它或实例。您希望在不再需要时将其清理干净。

关于python - 我应该使用 "self"来定义不需要从外部访问的类实例化变量/对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14094378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com