程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

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

发布于2024-11-06 19:30     阅读(694)     评论(0)     点赞(25)     收藏(5)


我有以下代码片段 - 我想要执行的操作的简化版本。但它给出了递归错误。

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}")

你知道怎样让它发挥作用吗?


解决方案


__new__create_method当子类方法调用时间接调用自身cls

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

File("data.cvs"调用File.__new__(File, "data.csv")哪个调用CSVFile.create_method("data.csv")哪个调用CSVFile("data.csv")哪个调用CSVFile.__new__(CSVFile, "data.csv")哪个,因为CSVFile.__new__未定义,所以调用File.__new__(CSVFile, "data.csv")...调用 CSVFile.create_method("data.csv") 哪个...



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/2043852/312d5f66f1c7c7eccfdf/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

25 0
收藏该文
已收藏

评论内容:(最多支持255个字符)