如何让父类返回参数数量不同的子类实例?
解决方法
问题根源在于:调用Number(0)时,父类__new__返回Zero实例后,Python会自动调用该实例的__init__方法,并将原调用的参数0传入,但Zero.__init__仅接受self,导致参数不匹配报错。以下是两种无需给Zero添加默认参数的解决思路:
方法一:让Zero.__init__接收任意参数并忽略
class Number: def __new__(cls, number): if cls is Number and number == 0: return Zero() return object.__new__(cls) def __init__(self, number): self.number = number class Zero(Number): def __new__(cls): return super().__new__(cls, 0) def __init__(self, *args, **kwargs): # 忽略所有传入的额外参数,直接初始化 self.number = 0
通过*args, **kwargs接收任意数量的位置参数和关键字参数,无论调用时传入什么参数都不会触发报错,同时直接完成Zero实例的初始化。
方法二:手动控制Zero实例的创建与初始化流程
class Number: def __new__(cls, number): if cls is Number and number == 0: # 直接创建Zero实例,不触发自动__init__ zero_instance = object.__new__(Zero) # 手动调用Zero的__init__,仅传递self(隐式) zero_instance.__init__() return zero_instance return object.__new__(cls) def __init__(self, number): self.number = number class Zero(Number): def __init__(self): self.number = 0
跳过Python自动调用__init__的逻辑,通过object.__new__(Zero)创建实例后,手动调用Zero.__init__(),确保只传递self参数,避免多余参数导致的错误。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

