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

265
23 сентября 2017, 21:00

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

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

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

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

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

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

UPD:

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

UPD2:

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

Answer 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]
READ ALSO
C++\CLI и C# в одном решении

C++\CLI и C# в одном решении

Есть два проектаОдин на C# (в основном интерфейс), другой на С++\CLI (сам код)

213
Использование SkiaSharp в WPF с соблюдением MVVM

Использование SkiaSharp в WPF с соблюдением MVVM

Цель: разработка простого векторного редактора на WPF с использованием SkiaSharp, в частности размещение SKElement в окне и рисование на нем прямых...

272
Не происходит нажатие на элемент формы WebBrowser

Не происходит нажатие на элемент формы WebBrowser

При нажатии на данную кнопку, должен произойти переход на другую страницуИспользовать url нельзя, потому что переключаются страницы без изменения...

280