有没有办法让一个类返回其子类的实例,并在 __init__ 中使用不同数量的参数?

问题描述 投票:0回答:1

我正在尝试创建一个类,该类将返回其自己的子类的实例,但我遇到了麻烦,因为子类的参数数量与类不同:


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):
        super().__init__(0)
        self.number = 0

Zero()  # Ok
Number(0)  # TypeError: __init__() takes 1 positional argument but 2 were given

我确切地知道为什么会发生这种情况,并且我可以通过在

Zero
中添加默认参数来轻松修复它:

class Zero(Number):
    def __new__(cls, number=0):
        return super().__new__(cls, 0)

    def __init__(self, number=0):
        super().__init__(0)
        self.number = 0

但是,我不喜欢它,有没有办法在不添加默认参数的情况下修复它

Zero

python class parameters instance
1个回答
0
投票

如果您不喜欢让子类的构造函数接受额外的参数,您可以将基类的构造函数的参数设置为可选:

class Number:
    def __new__(cls, number=0):
        if cls is Number and number == 0:
            return Zero()
        return object.__new__(cls)

    def __init__(self, number=0):
        self.number = number

class Zero(Number):
    def __new__(cls):
        return super().__new__(cls, 0)
© www.soinside.com 2019 - 2024. All rights reserved.