如何在python中不传递参数的情况下创建对象?

Posted

技术标签:

【中文标题】如何在python中不传递参数的情况下创建对象?【英文标题】:how to create an object without passing arguments in python? 【发布时间】:2020-07-25 04:17:56 【问题描述】:

我有一个从类类型和传入的内容创建对象的函数。

def create_from(cls, info):
    obj = cls.__new__(cls)
    obj.load_info(info)
    return obj

我这里使用__new__的原因是初始化对象需要的参数个数是不确定的。

除了我从asyncio.Future 继承的类之外,它适用于我拥有的所有类。

c = asyncio.Future
c.__new__(c)

会抛出 AttributeError 说:'Future' object has no attribute '_callbacks'。

我的问题是:

    有没有更好的方法? 为什么 asyncio.Future 中的__new__ 会抛出这个错误?在我看来,__new__ 应该被调用而不触及任何其他方法。

【问题讨论】:

【参考方案1】:

目前,我选择添加一个方法create_obj 用于所有将在此场景中使用的类。通过独立实现从asyncio.Future继承的类的方法,我绕过了这个问题。

class mySavableFuture(asyncio.Future):

    @classmethod
    def create_obj(cls):
        return cls()

class SavableA():

    @classmethod
    def create_obj(cls):
        return cls.__new__(cls)

这似乎是一种妥协的方式,但它适用于我现在。期待更好的解决方案。

【讨论】:

那行不通:您错过了cls 参数。注意__new__是静态方法,不是类方法。

以上是关于如何在python中不传递参数的情况下创建对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CMD 中不传递“python”的情况下使用 argparse?

java Web工程,如何在不传参数的情况下,判断WebService接口是不是开放

java 求助:如何解决地址栏传参数为中文文件路径时 乱码的情况?

在python 3中将参数传递给exec

对象作为参数传递给另一个类,通过值还是引用?

.net如何与pythonnet传递参数