在Python中动态地使用方法创建对象的好方法是什么?

时间:2019-05-28 11:52:36

标签: python python-3.x

我看到了几个标题相似的问题,但似乎没有一个适合我。

我想使用干净且“ 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, ...)语法。

进一步阅读:

0 个答案:

没有答案