我写了一段代码来确定一个典型的回文字符串。我通过定义一个reverse()方法返回一个字符串来实现这一点。我也渴望有同样的方法,但在虚空的形式,因为一些未来的需要。 当我将后者添加到代码中时,有效的输出将变得无效。 所以,问题是定义两个同名但返回类型不同的方法合法吗? 如果没有,请告诉我如何用void类型方法编写此代码。在
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()
当我添加注释行时,有效的“Yes”变成了“No”!在
如果调用两个方法,python将覆盖第一个方法,只保留定义的第二个方法:
基本上,第二种方法会覆盖第一种方法。在
要了解python为什么会这样做,请从常识的角度来看。假设你有一个在线的家庭作业,当你找到它时,有两个同名的作业。你怎么知道该选哪一个?基本上,python只选择最近的一个,这是明智的选择。在
另外,当调用函数时,您认为python如何理解您想要的函数,如果它们的名称相同呢?在
Python可能是一种聪明的语言,但它绝不是通灵的:)
如前所述,如果在类中定义第二个方法,第二个定义将覆盖第一个方法,剩下的就是第二个方法。在
但是,可以有一个同名的函数和一个方法。试试这个:
现在,您有一个名为}来处理列表:
^{pr2}$reverse
的函数和一个名为reverse
的方法,您可以像使用sorted
和{将其与对列表排序进行比较:
鉴于这反映了一种内在的战略,这可能是一种可行的方式。在
这样写是合法的,但它没有定义两个方法。最后一个定义覆盖了第一个定义,因此只有最后一个定义存在,并且将始终调用该定义。就像你做的一样
第一个作业被第二个作业抹去了。在
至于你更大的问题:让两个方法返回不同的东西的方法是用不同的名称定义两个方法。Python不知道函数“打算”返回的类型。没有所谓的“空类型方法”。在
相关问题 更多 >
编程相关推荐