gpt4 book ai didi

python - 在 __init__ 中定义成员与在 python 的类主体中定义它之间的区别?

转载 作者:太空狗 更新时间:2023-10-29 22:03:17 25 4
gpt4 key购买 nike

做和做有什么区别

class a:
def __init__(self):
self.val=1

class a:
val=1
def __init__(self):
pass

最佳答案

class a:
def __init__(self):
self.val=1

这会创建一个类(在 Py2 中,一个粗糙的、遗留的、旧式的,不要那样做!类;在 Py3 中,讨厌的旧遗留类终于消失了,所以这会是一种且唯一的类——**好*类,它需要 class a(object): in Py2) 这样每个实例都以它自己对整数对象的引用开始1

class a:
val=1
def __init__(self):
pass

这将创建一个类(同类),它本身具有对整数对象 1 的引用(它的实例开始时没有每个实例引用)。

对于像 int 值这样的不可变值,很难看出实际差异。例如,在任何一种情况下,如果您稍后在 a 的一个实例上执行 self.val = 2,这将生成一个实例 引用(现有的答案在这方面是严重错误的)。

区别对于可变对象来说很重要,因为它们有修改器方法,所以了解某个列表是每个实例唯一的还是在所有实例之间共享是非常重要的。但是对于 immutable 对象,因为你永远不能改变对象本身而只能赋值(例如给 self.val,它总是会产生一个实例引用),这很漂亮未成年人。

关于不可变的唯一相关区别:如果您稍后分配 a.val = 3,在第一种情况下,这将影响被视为 self.val 的内容每个实例(除了有自己的 self.val assigned 或等效操作的实例);在第二种情况下,它不会影响被任何实例视为 self.val 的内容(除了您已执行 del self.val 或等效操作的实例)。

关于python - 在 __init__ 中定义成员与在 python 的类主体中定义它之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1549722/

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