我试图用Python实现方法重载:
class A:
def stackoverflow(self):
print 'first method'
def stackoverflow(self, i):
print 'second method', i
ob=A()
ob.stackoverflow(2)
但输出是second method 2
;同样:
class A:
def stackoverflow(self):
print 'first method'
def stackoverflow(self, i):
print 'second method', i
ob=A()
ob.stackoverflow()
返回
Traceback (most recent call last):
File "my.py", line 9, in <module>
ob.stackoverflow()
TypeError: stackoverflow() takes exactly 2 arguments (1 given)
我该怎么做呢?
发布于 2018-02-27 10:29:06
这是方法重载而不是方法重写。在Python中,你可以在一个函数中完成所有工作:
class A:
def stackoverflow(self, i='some_default_value'):
print 'only method'
ob=A()
ob.stackoverflow(2)
ob.stackoverflow()
你不能在Python中拥有两个同名的方法 - 而且你不需要。
请参阅Python教程的默认参数值部分。
发布于 2018-02-27 11:04:00
在Python中,你不会那样做。当人们用Java这样的语言来做这件事时,他们通常需要一个默认值(如果他们不这样做,他们通常需要一个名称不同的方法)。因此,在Python中,可以拥有默认值。
class A(object): # Remember the ``object`` bit when working in Python 2.x
def stackoverflow(self, i=None):
if i is None:
print 'first form'
else:
print 'second form'
如你所见,你可以使用它可以触发单独的行为,而不仅仅是具有默认值。
>>> ob = A()
>>> ob.stackoverflow()
first form
>>> ob.stackoverflow(2)
second form
https://stackoverflow.com/questions/-100004166
复制相似问题