在调查Ruby时,我遇到了这个问题来创建一个类似Struct的类:
Person = Struct.new(:forname, :surname)
person1 = Person.new('John', 'Doe')
puts person1 #<struct Person forname="John", surname="Doe">
Run Code Online (Sandbox Code Playgroud)
这为我提出了一些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'
Run Code Online (Sandbox Code Playgroud)
Python中是否已有类似的机制来处理这个问题?(我通常只使用字典).
我如何获得Struct()创建正确__init__()参数的函数.(在这种情况下,我想尽可能执行person1 = Person('John', 'Doe')命名参数:person1 = Person(surname='Doe', forename='John')
我想,感兴趣的是,即使有更好的Python机制来解决问题2也是如此.
(使用Python 3.2,虽然我怀疑它很重要.)
我有class Data,class Rules和类Result.我使用小写来表示类的实例.
甲rules对象包含,如果施加到一个规则data对象,可以创建一个result对象.
我决定在哪里放置实际将规则应用于数据的(相当复杂和不断发展的)代码.我可以看到两个选择:
把那些代码放在一个类Result方法中,比如说parse_rules.Result构造函数将rules对象作为参数,并将其传递给self.parse_rules.
将该代码放在一个新类中ResultFactory.ResultFactory将是一个单例类,它有一个方法,比如说build_result,它接受rules一个参数并返回一个新构建的result对象.
这两种方法的优点和缺点是什么?