很抱歉,如果答案很明显,但我想确定,如果你有(用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 的值。但是,如果是这样的话,为什么使用数据类型呢?
答案 0 :(得分:3)
执行self.int_att1 = int
时,属性int_att1
现在引用类型 int
,我的意思是,它只是int
的另一个名称。我将以一种简单的方式证明这一点:
>>> number_type = int
>>> i = number_type()
>>> i
0
>>> type(i)
<type 'int'>
在此代码中,number_type
成为int
类型的“同义词”,这就是为什么当我询问i
的类型时,它返回int
而不是number_type
{1}}。
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
类型的初始值为0
,类型list
的初始值为[]
,这正是你在找什么!
答案 1 :(得分:2)
你可以,但它有完全不同的效果。在第二种情况下,您将属性设置为类型的值,这通常不是您想要的。在Python中,类型也是对象,所以这是合法的。
它会让你做类似的事情:
n = Name()
v = n.int_att1()
然后 v
将为0,因为这是由int
的无参数构造函数构造的值。
答案 2 :(得分:0)
来自The Zen of Python:“明确比隐含更好。”
您当然可以使用类型的默认值(不是示例中的类型本身)进行初始化,但显式优于隐式。当您使用实际值初始化时,毫无疑问您将获得什么。