如何实现具有不同参数类型的python函数

时间:2012-12-02 21:25:35

标签: python duck-typing

我需要用python实现两个参数函数。参数类型可以是:(String,String),(String,List)或(List,List)。在Java中我会使用重载来管理这种情况,但是在python中我只能在下一个解决方案中思考:

def myFunction(param1, param2):
     if isinstance(param1, basestring) and isinstance(param2, basestring):
        # implementation 1
     elif isinstance(param1, basestring) and isinstance(param2, list):
        # implementation 2
     elif ...

     else:
         raise TypeError

这是最好的方法吗?我是python的新手。

感谢。

1 个答案:

答案 0 :(得分:3)

鸭子打字意味着测试方法,而不是使用isinstance()。你打算用输入做什么

例如,如果您接受一个字符串,那么将该字符串拆分为换行符并使用它,就像列表一样,测试.splitlines()

if hasattr(arg1, 'splitlines'):
    arg1 = arg1.splitlines()
if hasattr(arg2, 'splitlines'):
    arg2 = arg2.splitlines()
# now arg1 and arg2 are presumed to be lists.