как создать объект без передачи аргументов в Python?

У меня есть функция, которая создает объект из типа класса и переданного содержимого.

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" не имеет атрибута "_callbacks".

Мой вопрос:

  1. Есть ли способ лучше?
  2. Почему __new__в asyncio.Future выдаст эту ошибку? На мой взгляд,__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)

Это похоже на компромисс, но сейчас он работает. Ожидайте лучшего решения.

Другие вопросы по тегам