如何在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接口是不是开放