python递归错误,在__new__方法中调用派生类的classmethod

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

我有以下代码 - 我想要做的事情的简化版本。 但这给了我一个递归错误。

class File:
    def __new__(cls, filename):
        extension = filename.split(".")[-1].lower()

        if extension == "csv":
            cls = CSVFile
        elif extension == "json":
            cls = JSONFile
        else:
            raise ValueError(f"Unsupported file extension: {extension}")

        # instance = super().__new__(cls)  # this works
        instance = cls.create_instance(filename)
        return instance

class CSVFile(File):
    def __init__(self, filename):
        self.filename = filename

    @classmethod
    def create_instance(cls, filename):
        print("CSVFile, create_instance")
        return cls(filename)

class JSONFile(File):
    def __init__(self, filename):
        self.filename = filename

    @classmethod
    def create_instance(cls, filename):
        print("JSONFile, create_instance")
        return cls(filename)

# Example usage
file_instance = File("data.csv")
print(f"File instance: {file_instance.filename}")

你知道如何让它发挥作用吗?

python recursion new-operator class-method
1个回答
0
投票
当子类

__new__

 方法调用 
create_method
 时,
cls
间接调用自身。

如果您想要一个工厂方法,请定义一个独特的方法,而不是尝试劫持

__new__
来达到目的。

© www.soinside.com 2019 - 2024. All rights reserved.