Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,为什么我们对变量使用与namedtuple的typename相同的名称?_Python_Class_Tuples - Fatal编程技术网

在python中,为什么我们对变量使用与namedtuple的typename相同的名称?

在python中,为什么我们对变量使用与namedtuple的typename相同的名称?,python,class,tuples,Python,Class,Tuples,在python文档中,namedtuple的实例由以下内容创建: Point = namedtuple('Point', ['x', 'y']) p = Point(11, y=22) 是否需要使用与namedtuple的typename相同的变量名?这样做有什么好处吗?如评论中所述,如果您使用不同的名称,以下内容将不必要地混淆: > from collections import namedtuple > Foo = namedtuple('Bar', ['x', 'y']) &

在python文档中,namedtuple的实例由以下内容创建:

Point = namedtuple('Point', ['x', 'y'])
p = Point(11, y=22)

是否需要使用与namedtuple的typename相同的变量名?这样做有什么好处吗?

如评论中所述,如果您使用不同的名称,以下内容将不必要地混淆:

> from collections import namedtuple
> Foo = namedtuple('Bar', ['x', 'y'])
> a = Foo(1, 2)
> print(a)
Bar(x=1, y=2)

也许你更喜欢新的打字版本,它的表面看起来不重复

class员工(姓名为双):
姓名:str
id:int=3
employee=employee('Guido')
断言employee.id==3

不,不需要。但大多数类都被分配给具有相同
\uuu名称的变量,例如
类Foo:pass
创建一个具有
\uu名称的类\uuu==“Foo”
并将其分配给变量
Foo
。如果你想
Bar=Foo;del Foo
现在只有一个名为
Bar
的变量,它引用了类Thank you,那么人们为什么用这种方式呢?有什么好处吗@juanpa.Arrivillagab因为它和其他东西一致?你为什么要做不同的事情?你知道,
namedtuple
是一个类工厂,它创建一个类,而不是一个实例,对吗?它也会导致命名元组的pickle和unpickle实例出现问题,它需要指定的名称来匹配定义名称。我想我有很多要研究的,我不知道pickle和unpickling是什么,这有一个非常不直观的结果,
isinstance(employee,NamedTuple)
将返回
False
,因为
NamedTuple
不是一个真正的类型,相反,它仅仅使用元类机制在引擎盖下调用常规的
NamedTuple
类工厂。在python中,“实用性胜过纯洁性”,我想,但这一点确实让我感到困扰。当然,但就这一点而言,
isinstance(常规的命名元组,命名元组)
将失败。类型为
tuple
。在本例中,您还可以获得类型
Employee
和类型注释的好处。是的,但我认为由于
namedtuple
是一个类工厂,并且使用起来显然像工厂一样,因此人们不会期望
isinstance
返回true,并期望它会引发错误。但是我同意,能够对namedtuple类进行类型注释是很好的。