Изучая Ruby, я наткнулся на это, чтобы создать простой Struct-подобный класс:
Person = Struct.new(:forname, :surname)
person1 = Person.new('John', 'Doe')
puts person1 #<struct Person forname="John", surname="Doe">
Это вызвало у меня несколько вопросов о Python. Я написал [ОЧЕНЬ] базовый клон этого механизма на Python:
def Struct(*args):
class NewStruct:
def __init__(self):
for arg in args:
self.__dict__[arg] = None
return NewStruct
>>> Person = Struct('forename', 'surname')
>>> person1 = Person()
>>> person2 = Person()
>>> person1.forename, person1.surname = 'John','Doe'
>>> person2.forename, person2.surname = 'Foo','Bar'
>>> person1.forename
'John'
>>> person2.forename
'Foo'
Есть ли в Python аналогичный механизм для решения этой проблемы? (Я обычно просто использую словари).
Как заставить функцию
Struct()
создавать правильные__init__()
аргументы. (в этом случае я хотел бы, если возможно, выполнитьperson1 = Person('John', 'Doe')
именованных аргументов:person1 = Person(surname='Doe', forename='John')
В качестве интереса я хотел бы получить ответ на вопрос 2, даже если для этого существует лучший механизм Python.