在python中,为什么我们对变量使用与namedtuple的typename相同的名称?
在python文档中,namedtuple的实例由以下内容创建:在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']) &
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类进行类型注释是很好的。