定义两个名称相同但返回类型不同的方法合法吗?

2024-10-04 05:24:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一段代码来确定一个典型的回文字符串。我通过定义一个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”!在


Tags: 方法字符串代码inself类型string定义
3条回答

如果调用两个方法,python将覆盖第一个方法,只保留定义的第二个方法:

>>> def foo():
...     return 1
... 
>>> def foo():
...     return 2
... 
>>> foo()
2
>>> 

基本上,第二种方法会覆盖第一种方法。在

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

另外,当调用函数时,您认为python如何理解您想要的函数,如果它们的名称相同呢?在

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

如前所述,如果在类中定义第二个方法,第二个定义将覆盖第一个方法,剩下的就是第二个方法。在

但是,可以有一个同名的函数和一个方法。试试这个:

def reverse(detector_object):
    return detector(detector_object.string[::-1])

class detector(object):
...
    def reverse(self):
        self.string = self.string[::-1]

现在,您有一个名为reverse的函数和一个名为reverse的方法,您可以像使用sorted和{}来处理列表:

^{pr2}$

将其与对列表排序进行比较:

my_list.sort() # sort list in place
new_list = sorted(my_list)

鉴于这反映了一种内在的战略,这可能是一种可行的方式。在

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

x = 1
x = 2

第一个作业被第二个作业抹去了。在

至于你更大的问题:让两个方法返回不同的东西的方法是用不同的名称定义两个方法。Python不知道函数“打算”返回的类型。没有所谓的“空类型方法”。在

相关问题 更多 >