1

我需要用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新手。

谢谢。

4

1 回答 1

3

Duck typing 意味着测试方法,而不是使用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.
于 2012-12-02T21:28:15.963 回答