- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
只是想知道当我们创建一个namedtuple
对象时,为什么我们总是让新对象的名字(左边)和namedtuple
对象的名字(左边)一样右边)?
我尝试了一个实验,使它们具有如下不同的名称,然后使用不同的对象名称添加字段数据,如下所示:
>>> latlong = namedtuple('good', 'lat long')
>>> latlong(1, 2)
good(lat=1, long=2)
>>> good(1,2)
latlong(lat=1, long=2)
因此,当我使用 latlong
添加字段时,它返回 good()
,当我使用 good
时,它返回 latlong
。为什么他们每次都返回不同的名字?他们不应该总是返回 good
的原始对象名称吗?
谢谢!
埃里克
最佳答案
作为第一个参数传递的名称是存储在命名元组中的名称,作为其 __name__
属性 - 当您在此类元组上调用 repr
时使用. (你,或者,在这种情况下,交互式解释器 - 它进行 repr 调用以获取你打印的内容)。
您将 namedtuple 分配给的名称 - 也就是说,=
左侧的名称只是您选择在代码中使用的任何名称 - 就像您可以命名任何其他 Python 对象一样。
您甚至可以通过简单地执行以下操作来为单个 namedtuple 类调用很多名称:
N = Name = NameAndAddress = namedtuple("NameAndAddress", "name address")
您可以通过使用任何分配的名称来使用同一对象。或者您可以在一个列表中存储大量命名元组,并且不为它们中的任何一个提供明确的名称 - 就像任何其他对象一样,保存对象引用的变量名称没有区别。
这有点不幸,因为为了更好的可读性,我们希望 namedtuple 的“内部”名称与我们用来引用它的名称相同。 Python 无法干净地创建这样的赋值 - 除非它是在类体内进行的。换句话说:语言中没有机制可以让 =
右侧的表达式知道它被分配给哪个名称(在 =
左侧code>) - 因此 namedtuple 签名要求您将其名称显式键入为字符串。但尽管如此,没有任何机制或检查来验证分配的名称和内部名称是否相同。
作为旁注:如果您在类体内分配名称,Python 中有一些机制允许您“告诉”分配的对象它的名称(这将是一个类属性)。在 Python 3.5 之前,您必须在类的元类或类装饰器中执行此操作。在 Python 3.6 中,分配的对象本身可能是一个描述符,其类实现了一个名为 __set_name__
的特殊方法。如果是这样,则在类实例化时调用该方法并传递类对象和属性名称——方法中的代码然后可以在实例中设置名称。
关于python-3.x - Namedtuple 类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43928308/
typing module documentation表示下面的两个代码片段是等价的。 from typing import NamedTuple class Employee(NamedTuple)
是否可以在另一个 namedtuple 中包含一个 namedtuple? 例如: from collections import namedtuple Position = namedtuple('
为什么我不能 pickle typing.NamedTuple 而我可以 pickle collections.namedtuple?我如何设法 pickle NamedTuple? 这段代码展示了我
我正在尝试创建一个 NamedTuple,其中一个字段默认为空字典。这大部分都有效,但是默认值在 NamedTuple 的实例之间共享: from typing import NamedTuple,
我正在寻找一种类似结构的数据结构,我可以从中创建多个实例并具有某种类型提示而不是不可变的。 所以我有这样的东西: class ConnectionConfig(NamedTuple): nam
在下面的代码中: point=namedtuple('point','x y') 我很困惑,一个类被视为一个值。就像我做的那样: class point: ... 它在命名空间中创建一个名为
考虑以下扩展 list 并附加 orderedtuple 的类: from collections import namedtuple Order = namedtuple('Order', ['id
我一直在使用这个基本代码来构建一个简单的库存系统。我需要扩展它以跟踪离开库存的另一个零件列表。我想我可以通过为数据结构创建另一个命名元组来做到这一点。我遇到一些问题,因为两个命名元组需要存在并同时访问
Python namedtuple 工厂函数允许它创建的子类的名称被指定两次——第一次在声明的左侧,然后作为函数的第一个参数(IPython 1.0.0 , Python 3.3.1): In [1]
最近我有一个关于数据类型的问题。 从那时起,我一直在尝试使用 NamedTuples(或多或少取得了成功)。 我目前的问题: - 如何将行从文件导入到新元组, - 如何将以空格/制表符(/无论什么)分
我有一个类,它几乎没有静态字段,并且是从可迭代对象初始化的(比如 csvreader 的输出)。 __init__ 为其中一些执行从字符串到数字的类型转换: class PerformanceTest
我知道 collections.namedtuple 的存在和目的,但我注意到,至少在 IDLE (3.2.2) 中,这个工厂函数也在 functools: >>> import functools
我想存储一个维度 namedtuple (x, y)。在我的整个程序中我只需要一次。 我能做到: Dimension = namedtuple('Dimension', ['x', 'y']) dim
有没有办法为 python 中的 namedtuple 重载相等运算符 __eq__(self, other)? 我知道这在类和重新定义方法中是可能的,但这对于 namedtuple 是否也可能,您将
这个问题在这里已经有了答案: Why should I use CamelCase for namedtuple? (1 个回答) 关闭 3 年前。 我是 Python 的新手,我一直在阅读在线文档
我们像这样使用 namedtuple: >>> from collections import namedtuple >>> Point = namedtuple('Point', ['x', 'y'
我正在处理命名元组列表。我想在创建每个命名元组后为其添加一个字段。似乎我可以通过将它作为属性引用来做到这一点(如 namedtuple.attribute = 'foo'),但它不会添加到字段列表中。
我正在尝试记录 namedtuple。当我构建文档时,我收到警告 WARNING: duplicate object description 和在记录的函数之后相同的空函数。例如: 如何删除那些别名?
在 Python 3.6 之后,我们有 typing.NamedTuple ,它是 collections.namedtuple() 的类型化版本,我们可以像类一样继承它: class Employe
鉴于我想从类型模块中正确使用命名元组的类型注释: from typing import NamedTuple, List class Foo(NamedTuple): my_list: Lis
我是一名优秀的程序员,十分优秀!