You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ApnaCollege类对象定义后,编写什么代码可触发所有fun方法的打印输出?

问题分析与解决方案

首先明确:Python不支持方法重载,你在ApnaCollege类中连续定义三个同名fun方法,后面的会直接覆盖前面的——也就是说,最终类里只有最后一个接受两个参数的fun方法是有效的,前两个已经被覆盖消失了。

同时原代码的实例化和调用都有错误:

  • obj = ApnaCollege():__init__要求传入x和y两个参数,这里没传会报错
  • obj.fun()和obj.fun(3):此时类中只剩接受两个参数的fun,调用时参数数量不对会报错

要触发三个不同的打印输出,需要调整类的定义,下面是两种可行方案:

方案1:用默认参数兼容多场景

修改fun方法的参数为带默认值的形式,让一个方法兼容三种调用情况:

class ApnaCollege():
    def __init__(self, x, y):
        self.x = x
        self.y = y
        print(self.x)
    
    def fun(self, x=None, y=None):
        if x is None and y is None:
            print("I am a function with no argument")
        elif y is None:
            print("The function with an argument")
        else:
            print("The function with two arguments")

# 正确实例化对象(传入__init__要求的x和y参数)
obj = ApnaCollege(10, 20)

# 调用三种场景的fun,触发对应打印
obj.fun()
obj.fun(3)
obj.fun(3, 5)

方案2:给方法设置不同名称

如果坚持保留三个独立方法,直接修改方法名避免覆盖:

class ApnaCollege():
    def __init__(self, x, y):
        self.x = x
        self.y = y
        print(self.x)
    
    def fun_no_arg(self):
        print("I am a function with no argument")
    
    def fun_one_arg(self, x):
        print("The function with an argument")

    def fun_two_args(self, x, y):
        print("The function with two arguments")

# 正确实例化
obj = ApnaCollege(10, 20)

# 分别调用三个方法
obj.fun_no_arg()
obj.fun_one_arg(3)
obj.fun_two_args(3, 5)

两种方案都能触发你需要的三个打印输出,方案1更贴近你原本想实现的“同名方法多场景调用”思路,方案2则更符合Python的编码习惯。

内容的提问来源于stack exchange,提问作者Amit Ingle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:03:19