我看到了几个标题相似的问题,但似乎没有一个适合我。
我想使用干净且“ pythonic”的语法动态地创建python对象,可能使用方法。到目前为止,我有:
import types
class QuickObject:
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
def with_methods(self, **kwargs):
for name, method in kwargs.items():
self.__dict__[name] = types.MethodType(method, self)
return self
可能的用法:
ob = QuickObject(x=10, y=20)
print(ob.x, ob.y)
ob = QuickObject(x=10, y=20).with_methods(sum=lambda s: s.x + s.y)
print(ob.x, ob.y, ob.sum())
它可以正常工作,看起来很清晰,但看起来有些奇怪,我相信比我对QuickObject
类的定义有更好的实现方法。
我知道namedtuple
,但是它是不可变的,不与方法一起使用,也不是很酷,因为必须事先为具有不同字段的每个对象定义它。
内置字典也不提供方法调用的语法,也没有使用没有自定义dict子类的dictionary.key
语法访问数据。
TLDR :我正在寻找具有以下用途的动态物体的配方:
ClassName(field1=value, field2=value, ...)
语法。进一步阅读: