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

Python中__init__方法使用*args导致返回元组而非整数的问题排查

问题原因与解决方案

嘿,这事儿我太清楚了!你碰到的问题根源在于Python里*args的工作逻辑——它的作用是把所有传入的位置参数打包成一个元组,哪怕你只传了单个值,它也会生成一个只有一个元素的元组(也就是你看到的(10,))。

看你的代码:在__init__方法里,你直接把args赋值给了私有属性self.__numero,那这个属性自然就成了元组类型。虽然get_numero方法标注了返回int类型,但Python的类型提示只是静态检查用的“提示”,不会在运行时强制转换类型,所以实际返回的还是元组,打印出来就是(10,)啦。

给你两种解决思路,看你需求来选:

情况1:类只需要接收单个整数参数

直接去掉*args,改成普通的位置参数就行,这样逻辑最清晰:

class Operacoes(object):
    def __init__(self, numero):
        self.__numero = numero
    def get_numero(self) -> int:
        return self.__numero
x = Operacoes(10).get_numero()
print(x) # 输出10

情况2:需要支持可变数量参数,但要返回特定整数

如果确实需要用*args来接收多个参数,但get_numero要返回其中某个整数(比如第一个),那就从元组里提取对应元素,最好再加个参数校验避免空元组的情况:

class Operacoes(object):
    def __init__(self, *args):
        if not args:
            raise ValueError("至少需要传入一个整数参数")
        self.__numero = args[0] # 提取第一个参数作为目标值
    def get_numero(self) -> int:
        return self.__numero
x = Operacoes(10).get_numero()
print(x) # 输出10

最后提个小提醒:Python的类型注解(比如-> int)不会自动帮你做类型转换,它主要是给你自己、其他开发者,或者静态检查工具(比如mypy)看的,运行时该是什么类型还是什么类型,所以代码逻辑上要自己保证返回值的类型符合预期哦。

内容的提问来源于stack exchange,提问作者tars.spock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:52:46