定义具有相同名称但返回类型不同的两个方法是否合法?

Rob*_*ist 1 python

我写了一段代码来确定一个典型的回文字符串.我通过返回字符串的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)

当我添加注释行时,有效的"是"变为"否"!

A.J*_*pal 6

如果你调用两个方法,python将覆盖第一个方法,只留下第二个方法:

>>> def foo():
...     return 1
... 
>>> def foo():
...     return 2
... 
>>> foo()
2
>>> 
Run Code Online (Sandbox Code Playgroud)

基本上,第二个优先于第一个.

要了解为什么python会这样做,从常识的角度来看它.假设你有一个在线的家庭作业,当你到达它时,有两个同名的作业.你怎么知道选哪一个?基本上,python只选择最新的一个,这是明智的选择.

另外,在调用函数时,如果 python都具有相同的名称,认为如何理解你想要哪一个?

Python可能是一种智能语言,但它绝不是通灵的:)

  • 要说Python在你调用*时不知道要选哪一个,这是误导性的.当你打电话给它时,别无选择.在进行第二次定义时,第一次定义会被覆盖,无法将其取回或使用它.不仅仅是最后定义的是被称为的那个; 相反,最后定义的那个是唯一一个甚至可以调用的. (2认同)

Bre*_*arn 6

写这个是合法的,但它没有定义两种方法.最后一个定义会覆盖第一个定义,因此只存在最后一个定义,并且始终会调用一个定义.就像你做的一样

x = 1
x = 2
Run Code Online (Sandbox Code Playgroud)

第一个任务被第二个任务抹掉了.

至于你的大问题:有两种返回不同东西的方法的方法是定义两个具有不同名称的方法.Python对函数"打算"返回的类型一无所知.没有"虚空型方法"这样的东西.