python-3.x 如果输入已经是一个类的示例,我们如何创建一个不做任何事情的类构造函数呢?

kyks70gy  于 2023-03-13  发布在  Python
关注(0)|答案(1)|浏览(99)

如果输入已经是一个类的示例,我们如何创建一个不做任何事情的类构造函数呢?
下面的代码不起作用,但它确实部分地向您展示了我正在尝试完成的任务:

class Apple:
    def __init__(self, *args):
        if len(args) == 1 and isinstance(other, type(self)):
            return self
        else:
            self._seeds = "".join(str(arg) for arg in args)

我们可能必须重写(重载?)__new__,或者创建一个元类,但我不确定如何做到这一点。
名为Apple的类非常做作。
总体来说,我正在尝试编写一个函数,它可以接受解析或未解析的数据作为输入。
如果数据已经被解析,则没有理由再次解析它。
如果输入是ParsedData的示例,则返回输入。
如果输入不是ParsedData的示例,那么我们将输入传递给名为ParsedData的类的构造函数。

abithluo

abithluo1#

只需处理函数中的逻辑:

def parse_data(data):
    if isinstance(data, ParsedData):
        return data
    return ParsedData(data)

或者像其他人建议的那样,可以使用类方法

class ParsedData:
    def __init__(self, data):
        ...

    @classmethod
    def from_data(cls, data):
        if isinstance(data, cls):
            return data
        return cls(data)  

parsed = ParsedData.from_data(my_data)

相关问题