gpt4 book ai didi

python - 在 Python 中向 __call__ 方法添加验证

转载 作者:太空宇宙 更新时间:2023-11-04 00:52:16 24 4
gpt4 key购买 nike

我有一个很大的类层次结构,源自 Function 类(例如 SineFunction 将是一个子类),并且它们都实现了 __call__ 方法,以及其他方法(例如推导或更专业的数值方法)。

根据输入类型向这些 __call__ 方法中的每一个添加通用逻辑的最简洁的方法是什么?正式地,我想要类似的东西

def __call__(self,x):
if isinstance(x,Distribution):
return FunctionDistribution(x,self)
else:
# Go back to previous logic

Function 的每个子类。我可以在 __call__ 的每个实现中添加 super() 但这会很痛苦。有什么比这更容易实现的吗?

最佳答案

这样的事情怎么样?

class BaseFunction(object):
def __call__(self, x):
if isinstance(x, BaseFunction):
return self._call(x)
else:
print("Fallback logic goes here")

def _call(self):
raise NotImplementedError

class ChildFunction(BaseFunction):
def _call(self, x):
print("Child function executed on x")

子类各自定义_call,回退逻辑驻留在父类中。

一个例子:

>>> a = BaseFunction()
>>> b = ChildFunction()
>>> c = 3
>>> b(a)
Child function executed on x
>>> b(c)
Fallback logic goes here

编辑:

顺便说一句,我不太了解您的特定用例,但我的理解是 isinstance 通常不是理想的选择,最好做某种 duck typing 。在这种情况下,您可能希望将 if(isinstance(... 语句替换为 try/except block 使用接口(interface)就好像 x 实现了BaseFunction 接口(interface)。

关于python - 在 Python 中向 __call__ 方法添加验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36612086/

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