我写了一段代码来确定一个典型的回文字符串.我通过返回字符串的reverse()方法的定义来做到这一点.我也渴望拥有相同的方法,但是在虚空形式中,因为未来的某些需求.当我将后者添加到代码中时,有效输出将变为无效.所以,问题是定义两个具有相同名称但返回类型不同的方法是否合法?如果没有,请让我知道如何使用void-type方法编写此代码.
class detector(object):
def __init__(self,string):
self.string = string
forbidden = (' ','!','?','.','-','_','&','%',"#",",")
def eliminator(self):
for item in self.forbidden:
if item in self.string:
self.string = self.string.replace(item,"")
def reverse(self):
return self.string[::-1]
#def reverse(self):
# self.string = self.string[::-1] I am prone to add this method
def check(self):
reversed = self.reverse()
if self.string == reversed:
print("Yes")
else:
print("No")
det = detector("rise to vote, sir!")
det.eliminator()
det.check()
Run Code Online (Sandbox Code Playgroud)
当我添加注释行时,有效的"是"变为"否"!
如果你调用两个方法,python将覆盖第一个方法,只留下第二个方法:
>>> def foo():
... return 1
...
>>> def foo():
... return 2
...
>>> foo()
2
>>>
Run Code Online (Sandbox Code Playgroud)
基本上,第二个优先于第一个.
要了解为什么python会这样做,从常识的角度来看它.假设你有一个在线的家庭作业,当你到达它时,有两个同名的作业.你怎么知道选哪一个?基本上,python只选择最新的一个,这是明智的选择.
另外,在调用函数时,如果 python都具有相同的名称,你认为如何理解你想要哪一个?
Python可能是一种智能语言,但它绝不是通灵的:)
写这个是合法的,但它没有定义两种方法.最后一个定义会覆盖第一个定义,因此只存在最后一个定义,并且始终会调用一个定义.就像你做的一样
x = 1
x = 2
Run Code Online (Sandbox Code Playgroud)
第一个任务被第二个任务抹掉了.
至于你的大问题:有两种返回不同东西的方法的方法是定义两个具有不同名称的方法.Python对函数"打算"返回的类型一无所知.没有"虚空型方法"这样的东西.