gpt4 book ai didi

python - 在 __init__ 之外初始化实例变量时会发生什么

转载 作者:太空狗 更新时间:2023-10-30 00:53:38 27 4
gpt4 key购买 nike

在 python 中,当您初始化一个实例变量(例如 self.my_var)时,您应该在您的类 __init__ 函数中执行此操作,以便为此正确保留内存每个实例变量(<--我的错误,见下文)。当你想定义类级变量时,你可以在函数之外进行,并且没有 self 前缀。

当您在函数内实例化一个变量而不是带有 self 前缀的 __init__ 时会发生什么?它的行为就像一个普通的实例变量,是否有令人信服的理由不这样做?除了使代码逻辑隐含的危险之外,这已经是一个足够的理由,但我想知道如果你这样做,你是否可能会在内存或其他隐藏问题上运行?

我找不到在某处讨论过的内容。

更新对不起

我误解了一些答案,包括此处的第一个和第三个 Python __init__ and self what do they do? (寻找其他人)并认为 __init__ 是某种特殊类型的函数,认为它以某种方式具有内存分配功能(!?)。错误的问题。

最佳答案

__init__ 方法并不特殊。唯一使 __init__ 有趣的是当您调用 MyClass() 时它会被调用。

以下是等价的:

# Set inside __init__
class MyClassA:
def __init__(self):
self.x = 0
obj = MyClassA()

# Set inside other method
class MyClassB:
def my_initialize(self):
self.x = 0
obj = MyClassB()
obj.my_initialize()

# Set from outside any method, no self
class MyClassC:
pass
obj = MyClassC()
obj.x = 0

实例变量是在你赋值的时候产生的,这可以发生在任何地方。另请注意,self 也不是特别的,它只是一个普通的函数参数(事实上,您可以将其命名为 self 以外的名称)。

so that the memory is properly reserved for this variable per instance.

您不需要在 Python 中“保留内存”。对于普通对象实例,当您分配 self.x = 0obj.x = 0 时,这有点像在字典中放入一个值。事实上,

# This is sometimes equivalent, depending on how obj is defined
obj.__dict__['x'] = 0

关于python - 在 __init__ 之外初始化实例变量时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45486395/

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