首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python中使用方法重载?

如何在Python中使用方法重载?
EN

Stack Overflow用户
提问于 2018-02-27 02:03:42
回答 2查看 0关注 0票数 0

我试图用Python实现方法重载:

代码语言:txt
复制
class A:
    def stackoverflow(self):    
        print 'first method'
    def stackoverflow(self, i):
        print 'second method', i

ob=A()
ob.stackoverflow(2)

但输出是second method 2;同样:

代码语言:txt
复制
class A:
    def stackoverflow(self):    
        print 'first method'
    def stackoverflow(self, i):
        print 'second method', i

ob=A()
ob.stackoverflow()

返回

代码语言:txt
复制
Traceback (most recent call last):
  File "my.py", line 9, in <module>
    ob.stackoverflow()
TypeError: stackoverflow() takes exactly 2 arguments (1 given)

我该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2018-02-27 10:29:06

这是方法重载而不是方法重写。在Python中,你可以在一个函数中完成所有工作:

代码语言:txt
复制
class A:

    def stackoverflow(self, i='some_default_value'):    
        print 'only method'

ob=A()
ob.stackoverflow(2)
ob.stackoverflow()

你不能在Python中拥有两个同名的方法 - 而且你不需要。

请参阅Python教程的默认参数值部分。

票数 0
EN

Stack Overflow用户

发布于 2018-02-27 11:04:00

在Python中,你不会那样做。当人们用Java这样的语言来做这件事时,他们通常需要一个默认值(如果他们不这样做,他们通常需要一个名称不同的方法)。因此,在Python中,可以拥有默认值

代码语言:txt
复制
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'

如你所见,你可以使用它可以触发单独的行为,而不仅仅是具有默认值。

代码语言:txt
复制
>>> ob = A()
>>> ob.stackoverflow()
first form
>>> ob.stackoverflow(2)
second form
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档