Pythonic способ инициализировать объект с большим количеством параметров и значением по умолчанию
Мне нужно создать класс, для которого требуется множество параметров.
class Line: def __init__(self, name, nb = None, price_unit = None, total = None, unit = None, time = None, session = None ):
Каждый атрибут получит одно и то же имя и то же значение, что и параметр, переданный __init __ () .
Поэтому, конечно, я мог бы сделать:
class MyClass: def __init__(self, name, nb = None, price_unit = None, total = None, unit = None, time = None, session = None ): self.name = name self.nb = nb self.price = price self.price_unit = price_unit self.total = total self.unit = unit self.time = time self.session = session
Но это действительно тяжелая нотация и не кажется мне для меня питонической. Знаете ли вы более питоническую манеру?
- TypeError: элемент последовательности 0: ожидаемый экземпляр str, найденные байты
- Преобразование предложения в свинцовый латин?
- колба sqlalchemy несколько внешних ключей в отношениях
- Написание контракта типа для магического квадрата
- как я могу использовать remove для этого кода?
Поскольку вы устанавливаете значения по умолчанию для всех аргументов ключевого слова None
, вы можете сделать более читаемым:
class MyClass: def __init__(self, name, **kwargs): self.name = name for attr in ('nb', 'price_unit', 'total', 'unit', 'time', 'session'): setattr(self, attr, kwargs.get(attr))
Тем не менее, я думаю, что ваш первоначальный подход тоже довольно стандартный, хотя вы можете его улучшить, удалив пробелы между аргументами и их значениями по умолчанию.
class MyClass: def __init__(self, name, nb=None, price_unit=None, total=None, unit=None, time=None, session=None): ...
В очень путинском смысле это может быть:
class MyClass: def __init__(self, name, **kwargs): self.name = name self.__dict__.update(kwargs)
Вы можете использовать * args ie
def __init__(self, *args): self.args = args
- создать трехмерное двоичное изображение
- Как определить, является ли данный объект заданным типом в Python?
- Питонический способ сравнения всех смежных элементов в списке
- Эквивалентный urllib.parse.quote () в python 2.7
- Запустить процесс с выходом в реальном времени в графический интерфейс Tkinter
- Ошибка экземпляра класса в Python 3, чем Python 2
- Что такое эквивалент Python для пространства имен C ++?
- Нет Ошибка / ошибка Python?
- Гарантирован ли порядок результатов re.findall?
- pip install pickle не работает – нет такого файла или каталога
- Ограничение печати