我需要调用未命名的方法first
,还需要参数化的方法first
,但它给出了一个错误。
>>> class A:
... def first(self):
... print 'first method'
... def first(self,f):
... print 'first met',f
...
>>> a=A()
>>> a.first()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: first() takes exactly 2 arguments (1 given)
在Python中是否可以像在Java中那样进行方法重载?
Python不做函数重载。这是它是一种松散类型语言的结果。相反,您可以指定未知数量的参数,并在函数逻辑中处理它们的解释。
有几种方法可以做到这一点。可以指定特定的可选参数:
我们称之为:
或者可以指定未知数量的未命名参数(即在数组中传递的参数):
我们称之为:
或者可以指定未知数量的命名参数(即在字典中传递的参数):
我们称之为:
您可以使用这些构造来产生您在重载中寻找的行为。
通常在一个具有给定名称的类中只能定义一个方法。在您的示例中,2 argument first()方法覆盖了1 argument first()。如果您想要两个同名的方法,那么在python 3中,您必须使用functools.singledispatch,并将实例方法名称映射到静态方法调度器,哎哟!
也就是说,我真的很喜欢OO编程中的动态调度,我发现它比在某种“master”first()函数中编写手动调度逻辑更干净,这种函数重复性强,扩展性差。
挑战问题:添加另一个方法,如A.first(A arg)。
如果您尝试这样做,您可能会学到很多关于python类型系统的知识!
您的第二个
first
方法正在重写原始的first
方法。在Python中,不可能像在Java中那样创建重载方法。但是,您可以创建具有基于可选和/或关键字的参数的方法,并相应地处理这些参数。下面是一个例子:
用法:
相关问题 更多 >
编程相关推荐