标签: class-factory

类工厂生成简单的类结构类?

在调查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)
  1. Python中是否已有类似的机制来处理这个问题?(我通常只使用字典).

  2. 我如何获得Struct()创建正确__init__()参数的函数.(在这种情况下,我想尽可能执行person1 = Person('John', 'Doe')命名参数:person1 = Person(surname='Doe', forename='John')

我想,感兴趣的是,即使有更好的Python机制来解决问题2也是如此.

python struct class-factory

11
推荐指数
4
解决办法
7498
查看次数

使用工厂与常规构造函数的利弊

(使用Python 3.2,虽然我怀疑它很重要.)

我有class Data,class Rules和类Result.我使用小写来表示类的实例.

rules对象包含,如果施加到一个规则data对象,可以创建一个result对象.

我决定在哪里放置实际将规则应用于数据的(相当复杂和不断发展的)代码.我可以看到两个选择:

  1. 把那些代码放在一个类Result方法中,比如说parse_rules.Result构造函数将rules对象作为参数,并将其传递给self.parse_rules.

  2. 将该代码放在一个新类中ResultFactory.ResultFactory将是一个单例类,它有一个方法,比如说build_result,它接受rules一个参数并返回一个新构建的result对象.

这两种方法的优点和缺点是什么?

python architecture oop design-patterns class-factory

9
推荐指数
1
解决办法
1533
查看次数