Python 对同一类型名称的不同名称的情侣有害的副作用?
考虑以下功能:Python 对同一类型名称的不同名称的情侣有害的副作用?,python,namedtuple,Python,Namedtuple,考虑以下功能: >>> from collections import namedtuple >>> def make_thing(**kwargs): ... ThingClass = namedtuple('ThingClass', kwargs.keys()) ... return ThingClass(**kwargs) ... >>> make_thing(x=1,y=2,z=3) ThingClass(y=2, x
>>> from collections import namedtuple
>>> def make_thing(**kwargs):
... ThingClass = namedtuple('ThingClass', kwargs.keys())
... return ThingClass(**kwargs)
...
>>> make_thing(x=1,y=2,z=3)
ThingClass(y=2, x=1, z=3)
>>> make_thing(a=4,b=5,c=6)
ThingClass(a=4, c=6, b=5)
>>>
该函数调用namedtuple
生成一个“临时”类,其字段名与输入dict
的键相同。然后返回一个实例,并填入值
我的问题是,这是否有任何特别的缺陷,因为namedtuple
的typename
参数总是相同的,即使有不同的字段名。例如,如果namedtuple
在后台创建了一个类,这样做会覆盖该类,那么我可能会看到一些潜在的奇怪行为随后出现。这样做有没有副作用/问题
可选信息:
如果你想知道我到底在做什么,让我不得不写这段代码,我有一个ORM,它返回了一些类似于dict的结果。我已经看到对象在赋值时的行为异常,我真的不希望传递那些可能或可能没有能力修改我的数据库的对象(取决于查询代码的编写方式)。尝试为每个查询维护DTO对象似乎太麻烦了,尝试使我的所有查询与一小部分DTO兼容也是如此。因此,我提出了一种快速、简单的方法来传递明显不可变的对象,在这里我可以编写像
dto.a
这样的代码。它本质上是一个动态的动态DTO发生器。它还为我在调试时购买了一个相当不错的repr
实现。没有陷阱,类没有集中注册
您所看到的只是使用self.\uuuuu name\uuuu
生成表示字符串的类。当make\u thing()
函数完成时,本地名称被清除,类本身仅作为实例上的引用存在