gpt4 book ai didi

python - 将基类添加到python中的现有对象

转载 作者:太空狗 更新时间:2023-10-29 22:05:05 25 4
gpt4 key购买 nike

我有几个不同类型的对象(不同的函数名称,不同的签名),我猴子修补它们,以便有一个通用的方法来从不同的函数访问它们。简而言之,有一个调度程序接收我想要修补的对象,并根据对象类型调用不同的修补程序。修补程序将向对象添加方法:

def patcher_of_some_type(object):

def target(self, value):
# do something and call self methods

object.target = types.MethodType(target, object)

# many more of these

随着程序变得越来越复杂,对对象(或对象类)进行包装似乎是更好的主意。一些修补程序共享公共(public)代码或相互关联。但是我不控制对象的创建,也不控制类的创建。我只得到对象。即使我能做到这一点,我也只想包装(或修补)某些对象,而不是全部。

一种解决方案可能是将基类添加到现有对象,但我不确定这是否可维护和安全。还有其他解决方案吗?

最佳答案

动态修改对象的类型是相当安全的,只要额外的基类是兼容的(如果不兼容,您将得到一个异常)。添加基类的最简单方法是使用 3 参数 type 构造函数:

cls = object.__class__
object.__class__ = cls.__class__(cls.__name__ + "WithExtraBase", (cls, ExtraBase), {})

关于python - 将基类添加到python中的现有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11042424/

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