【问题标题】:how to create an object without passing arguments in python?如何在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'。

我的问题是:

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

【问题讨论】:

    标签: python python-asyncio python-class


    【解决方案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__是静态方法,不是类方法。
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多