gpt4 book ai didi

class - 为什么在 Python 中使用数据类型来初始化实例是不好的?

转载 作者:太空宇宙 更新时间:2023-11-04 09:16:32 24 4
gpt4 key购买 nike

很抱歉,如果这个问题的答案很明显,但我想确定,如果你有(在 Python 中):

class Name(object):

def __init__(self):
self.int_att1 = 0
self.int_att2 = 0
self.list_att = []

为什么不能(我知道你可以,但我从未见过程序员这样做)你用这种方式初始化它:

class Name(object):

def __init__(self):
self.int_att1 = int
self.int_att2 = int
self.list_att = list

这会产生不良影响吗?是什么让前者更像 Pythonic?

我最好的猜测是因为 Python 需要 instance.attribute 的值。但如果是这种情况,为什么使用 datatype 有效呢?

最佳答案

当你执行 self.int_att1 = int 时,属性 int_att1 现在引用 type int,我的意思是,只是 int 的另一个名称。我将以一种简单的方式证明这一点:

>>> number_type = int
>>> i = number_type()
>>> i
0
>>> type(i)
<type 'int'>

在这段代码中,number_type 成为类型 int 的“同义词”,这就是为什么当我询问 i 的类型时,它返回 int 而不是 number_type

同样适用于 self.list_att = list


您可能想做的是:

class Name(object):

def __init__(self):
self.int_att1 = int()
self.int_att2 = int()
self.list_att = list()

这是完全不同的,您不再将类型分配给属性。相反,您正在分配该类型的初始值。让我们看看这些初始值是什么:

>>> initial_int = int()
>>> initial_int
0
>>> initial_list = list()
>>> initial_list
[]

因此,我们可以清楚地看到int类型的初始值为0list类型的初始值为[],这正是您要找的!

关于class - 为什么在 Python 中使用数据类型来初始化实例是不好的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8752959/

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