gpt4 book ai didi

python - 在 Python 中创建具有任意属性的对象的最短方法?

转载 作者:IT老高 更新时间:2023-10-28 22:16:10 25 4
gpt4 key购买 nike

嘿,我刚开始对此感到疑惑,因为我遇到了一个代码,该代码期望一个具有特定属性集的对象(但没有说明该对象应该是什么类型)。

一种解决方案是创建一个具有代码期望属性的新类,但是当我调用其他代码也需要具有(其他)属性的对象时,我必须创建越来越多的类。

一个更短的解决方案是创建一个泛型类,然后在它的实例上设置属性(对于那些想使用 object 的实例而不是创建一个新类的人来说,那不会无法工作,因为 object 实例不允许新属性)。

我想出的最后一个最短的解决方案是创建一个类,其构造函数采用关键字参数,就像 dict 构造函数一样,然后将它们设置为属性:

class data:
def __init__(self, **kw):
for name in kw:
setattr(self, name, kw[name])

options = data(do_good_stuff=True, do_bad_stuff=False)

但我不禁觉得我错过了一些明显的东西......难道没有内置的方法可以做到这一点(最好在 Python 2.5 中支持)?

最佳答案

type('', (), {})() 将创建一个可以具有任意属性的对象。

例子:

obj = type('', (), {})()
obj.hello = "hello"
obj.world = "world"
print obj.hello, obj.world # will print "hello world"

type() 使用三个参数创建一个新类型。

  • 第一个参数'' 是新类型的名称。我们不关心名称,所以我们将其留空。

  • 第二个参数() 是一个基本类型的元组。这里 object 是隐含的。

  • 第三个参数是新对象的属性字典。我们从没有属性开始,所以它是空的 {}

最后我们用 () 实例化这个新类型的一个新实例。

关于python - 在 Python 中创建具有任意属性的对象的最短方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2280334/

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