Ruby を調査しているときに、単純な構造体のようなクラスを作成するためにこれに出くわしました。
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')
興味のあることとして、これを行うためのより良い Python メカニズムがあったとしても、質問 2 に答えてもらいたいと思います。