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

2024-09-30 12:11:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我见过几个题目类似的问题,但似乎都不适合我

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

进一步阅读:


Tags: to对象方法nameselfdefwith语法

热门问题