gpt4 book ai didi

python - 类可以继承命名元组的属性吗?

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:11 25 4
gpt4 key购买 nike

我有一个命名的元组。

import collections

MyNamedTuple = collections.namedtuple('MyNamedTuple', 'prop1 prop2 foo bar')

我想定义一个可以由这些命名元组初始化的类。

class MyClass():
def __init__(self, t):
self.prop1 = t.prop1
self.prop2 = t.prop2
self.foo = t.foo
self.bar = t.bar

MyNamedTuple 越大,定义MyClass 所需的输入就越多,所以我很好奇是否有更有效的方法来定义MyClass.

最佳答案

您有几个选择... namedtuple返回一个类——您可以直接将其子类化:

class MyClass(MyNamedTuple):
...

当然,这意味着MyClass tuple这可能是不可取的...

您还可以使用 _fields namedtuple 的属性(已记录——前导下划线是为了防止属性名称冲突,而不是表明它是“私有(private)”成员)...

def __init__(self, t):
for field in t._fields:
setattr(self, field, getattr(t, field))

当然,这种通过内省(introspection)进行的设置并不总是最清晰的阅读方式(并且可能会导致虚假的 linter 警告)......

否则,没有一个真正好的方法可以让 linters 开心,并且有非常短的代码,将它们全部写出来可能是你最好的选择。如果 namedtuple 中的字段数预计将来会发生变化,我建议您进行单元测试以检查新创建的 MyClass。针对 MyNamedTuple用于创建它以确保 MyNamedTuple 的所有属性正在设置。您可以(并且可能应该)使用来自_fields 的自省(introspection)做这个检查。

关于python - 类可以继承命名元组的属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37666557/

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