gpt4 book ai didi

python - 如何处理多个不合作的 API 类并使它们合作?

转载 作者:行者123 更新时间:2023-11-28 19:15:31 26 4
gpt4 key购买 nike

灵感来自@Raymond Hettinger 的“ super 被认为是 super ” blogposttalk我已经成为 Python 中协作多重继承的忠实拥护者。

然而,并不是每个人都知道 python 中的这一特性,而且通常必须使用无法修改的代码(第 3 方等)。这给游戏带来了许多不合作的玩家,即不能很好地调用 super 的类。

一个不合作的基类可以通过将其放在 MRO 的末尾来管理:

class External1(object):
"""Nobody touch this code!"""
def __init__(self, *args, **kwargs):
self.important = "super"
class MyClass(MyCooperativeClass,External1):
pass

如何将此模式扩展到多个类,例如确保调用所有 __init__(*args,**kwargs)

class External2(object):
"""Nobody is touching this file!"""
def __init__(self, *args, **kwargs):
self.main_functionality = 5 # Chosen by dice roll, guaranteed to be random

class MyChild(MycooperativeClass, External1, External2):
pass

有没有办法将合作添加到非合作类中?

最佳答案

从您链接的博客文章中,他描述了使用适配器来实现结果。对于您的示例,您可以执行以下操作:

class Root(object):
def __init__(self, *args, **kwargs):
super().__init__(self)

class Extarnal1Adapter(Root):
def __init__(self, *args, **kwargs):
self.external1 = External1(*args, **kwargs)
self.important = self.external1.important
super().__init__(*args, **kwargs)

class Extarnal2Adapter(Root):
def __init__(self, *args, **kwargs):
self.external2 = External2(*args, **kwargs)
self.main_functionality = self.external2.main_functionality
super().__init__(*args, **kwargs)

class MyChild(MycooperativeClass, External1Adapter, External2Adapter):
pass

关于python - 如何处理多个不合作的 API 类并使它们合作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33876865/

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