Не существует эффективного ярлыка - это часть явной природы Python, которая должна явно создавать переменные вашего экземпляра, используя имена, которые вы хотите.
, если вы действительно настаиваете на более коротком коде, вы может использовать:
class MyClass:
def __init__(self, a, b, c):
self.__dict__.update(locals())
Все параметры (a, b & c) эффективно существуют как локальные переменные в методе __init__
, поэтому вы можете напрямую обновить экземпляр __dict__
; но
- Этот фрагмент превращает все ваши параметры в атрибуты независимо от того, хотите вы их или нет
- Вам нужен более сложный код, чтобы сделать атрибуты приватными - вам понадобится, например, понимание словаря - и ваш стиль имеет проблему выше.
- Вам все еще нужно явно указать код, если какой-либо из ваших атрибутов на самом деле должен быть изменяемым типом (таким как списки, словари, наборы и т. д. c).
- В итоге вы получите атрибут self.self (атрибут экземпляра, который будет ссылаться на себя); явно не очень хорошая идея. (Спасибо user2357112supportsMonica за определение этого).
Так что, хотя ярлык __dict__.update
может выглядеть мило, это не очень хорошее решение; Есть слишком много общих случаев, которые просто не обрабатываются.
Редактировать: Вы можете использовать классы данных, если вы знаете, что все ваши атрибуты будут опубликованы c и, например, вы не хотите использовать свойства для обеспечить обертки вокруг ваших атрибутов. Классы данных могут решить ваши проблемы, но это может создать больше проблем в зависимости от вашего конкретного случая использования. Если все, что вы хотите сделать, это сохранить несколько строк кода в методе __init__
, то я думаю, что вы делаете неправильную вещь - явное предпочтение перед неявным.
Я не совсем понимаю, что вы пытались добиться в вашем втором фрагменте - имена параметров для методов не могут быть точечными именами.