【发布时间】:2010-11-18 21:17:36
【问题描述】:
在研究 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 机制来执行此操作。
【问题讨论】:
-
Python 中没有结构类型,因为您很少需要它。大多数时候,一个元组或一个字典就足够了,对于更复杂的情况,使用一个真实的类。不要尝试用 Python 编写 Ruby 或 Java 代码 - 改用 Python 习语。
标签: python struct class-factory