Страницы

Поиск по вопросам

понедельник, 23 декабря 2019 г.

Как в Python 3 проинициализировать существующий класс в 1 строке свойствами вне конструктора, подобно c#?

#c_sharp #python #python_3x


В c# есть очень полезная конструкция. Если мне нужно создать экземпляр класса, а
свойств, которые надо задать нет в конструкторе, то это можно делать в одной строке
таким образом

var mc = new MyClass() { Prop1 = 1, Prop2 = "qwe" };


А можно подобное сделать в питоне?

Вообще требуется собрать список

list = [MyClass(el) for el in otherList]


Вот только проблема в том, что в конструктор MyClass ничего нельзя передать. Как
мне в таком случае создать экземпляр и задать 1 или несколько свойств в одной строке?

UPD:

Вопрос похож на предыдущий, но вот те ответы меня не устраивают. Возможно, это потому
что сам вопрос там был задан с меньшей конкретикой.

UPD2:

Ах да, вопрос все же отличается. Там человек спрашивает как повесить на автомат функцию
инициализации класса, а я спрашиваю как использовать готовый класс, при этом ни намека
на автоматику. В общем, советую внимательно вчитаться в оба вопроса, тогда все станет
понятно
    


Ответы

Ответ 1



Такого синтаксиса нет. Но можно создать функцию хелпер: def post_init(obj, **kwargs): for key, value in kwargs.items(): setattr(obj, key, value) return obj И юзать её: l = [post_init(MyClass(), el=el) for el in otherList] А можно подменить __init__(вообще вариант не оч, но тоже можно): def replace_init(cls): cls__init__ = cls.__init__ def my_init(self, el=None): cls__init__(self) self.el = el cls.__init__ = my_init replace_init(MyCLass) И юзать такой класс: l = [MyClass(el) for el in otherList]

Комментариев нет:

Отправить комментарий