Для позиционных аргументов вы можете сделать что-то вроде
class A:
def __init__(self, *args):
names = ('attr_name_1', 'attr_name_2', ..., 'attr_name_n')
for name, value in zip(names, args):
setattr(self, name, value)
Если вы хотите убедиться, что получаете необходимое вам количество значений, вы можете проверить len(args) == len(names)
С аргументами ключевых слов это просто
class A:
def __init__(self, **kwargs):
for name, value in kwargs.items():
setattr(self, name, value)
Опять же, если вы хотите проверить, соответствуют ли аргументы ожидаемым, вы можете сохранить ожидаемые ключи в наборе (скажем, names
) и проверить names == set(kwargs.keys())
В любом случае, если вы хотите использовать свой класс для хранения этих данных, вы можете использовать dataclasses
. Взято из официальной документации Python3.7:
@dataclass
class InventoryItem:
'''Class for keeping track of an item in inventory.'''
name: str
unit_price: float
quantity_on_hand: int = 0
def total_cost(self) -> float:
return self.unit_price * self.quantity_on_hand
Обратите внимание, что для более ранних версий Python dataclasses
не является частью стандартной библиотеки Python, но может быть установлен как обычный пакет (например, pip install dataclasses
)