gpt4 book ai didi

python - 如何为需要公共(public)参数和特定参数的实现创建公共(public)接口(interface)函数(在Python中)?

转载 作者:行者123 更新时间:2023-12-01 05:22:23 27 4
gpt4 key购买 nike

尝试用 Python 编写一个可以在实现上调用的接口(interface)函数,同时尽可能了解最少的特定于实现的信息。这有点难以用散文来解释,所以这里有一个代码示例。

代码:

# This is the interface function.
def my_interface_function(obj, c1, c2, s1, s2):
obj.fun(c1, c2, s1=s1, s2=s2)

class obj1(object):
def fun(self, c1, c2, s1=None, s2=None):
print c1, c2, s1

class obj2(object):
def fun(self, c1, c2, s1=None, s2=None):
print c1, c2, s2

# What I would like to happen is this:
my_interface_function(obj1(), 1, 2, 3, 4)
>>> 1, 2, 3

my_interface_function(obj2(), 1, 2, 3, 4)
>>> 1, 2, 4


总结:

这里的想法是,参数s2在obj1中没有使用(而是声明) - obj2中的s1也会发生同样的情况。如果任一实现类的参数列表增长,其他类也会增长,即使它们中的大多数可能不会被使用。

在界面中使用 **kwargs 是一种选择,但至少在我看来,主要问题是必须了解太多底层代码才能成为有用且可扩展的界面。换句话说,接下来的问题就变成了如何确定使用哪些参数来调用函数。

编写接口(interface)和实现函数以获得良好、现代且可读的代码的好方法是什么?

非常感谢!

最佳答案

我认为在这种情况下使用 **kwargs 并编写 docstrings 更干净。在特定的功能中。例如:

def my_interface_function(obj, c1, c2, **kw):
obj.fun(c1, c2, **kw)

class obj1(object):
def fun(self, c1, c2, **kw):
"""fun(c1, c2, s1) -> None"""
print c1, c2, kw.get('s1')

class obj2(object):
def fun(self, c1, c2, **kw):
"""fun(c1, c2, s2) -> None"""
print c1, c2, kw.get('s2')

关于python - 如何为需要公共(public)参数和特定参数的实现创建公共(public)接口(interface)函数(在Python中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22053022/

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