擅长:python、mysql、java
<p>自定义类的实例可以用作在其上设置的属性的容器。这可以简单地开始:</p>
<pre><code>class MyContainer:
pass
a = MyContainer()
a.x = Foo()
a.y = Foo()
a.x.DoFoo()
</code></pre>
<p>要获得作为构造函数的一部分传入所需属性的功能(使用与<code>dict</code>构造函数相同的语义),可以使它变得更复杂一些:</p>
<pre><code>def MyContainer:
def __init__(self, vals={}, **kwvals):
self.__dict__.update(vals, **kwvals)
a = MyContainer({"x":Foo()}, y=Foo()) # there are multiple ways to pass the args
a.x.DoFoo()
</code></pre>
<p>如果在创建此类容器后不需要添加或删除值,可以改用标准库的<code>collections.namedtuple</code>类工厂。您向它传递一个类名和一系列属性名,它将返回一个新类。你知道吗</p>
<pre><code>from collections import namedtuple
A = namedtuple("A", ["x", "y"])
a = A(Foo(), y=Foo()) # can use positional or keyword arguments
a.x.DoFoo() # this still works!
a.x = "something else" # but this will raise an error
</code></pre>