как создать объект без передачи аргументов в 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".
Мой вопрос:
- Есть ли способ лучше?
- Почему
__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)
Это похоже на компромисс, но сейчас он работает. Ожидайте лучшего решения.