<p>似乎您正在尝试重新创建<a href="https://docs.python.org/2/library/collections.html#collections.namedtuple" rel="nofollow">^{<cd1>}</a>。使用<code>namedtuple</code>将允许在上动态创建类、测试相等性和其他有趣的事情。缺点是,由于元组是不可变的,所以to是namedtuples,因此必须创建一个新对象,而不是更新属性。{slot{or你的slots}顺序不能同时检查。在</p>
<p>用法示例:</p>
<pre><code>from collections import namedtuple
MySlottedClassAB = namedtuple("MySlottedClassAB", ['a', 'b'])
MySlottedClassABC = namedtuple("MySlottedClassABC", ['a', 'b', 'c'])
class MySlottedClassBA(namedtuple("MySlottedClassBA", ['b', 'a'])):
def addAB(self):
return self.a + self.b
msc1 = MySlottedClassAB(a=1, b=2)
msc2 = MySlottedClassBA(b=2, a=1)
msc3 = MySlottedClassABC(1, 2, 3)
print(msc1)
print(msc2)
print(msc3)
print("{} == {} is {}".format(msc1, msc1, msc1==msc1))
print("{} == {} is {}".format(msc1, msc2, msc1==msc2))
print("{} == {} is {}".format(msc1, msc3, msc1==msc3))
print("msc2.addAB() is {}".format(msc2.addAB()))
</code></pre>
<p>如果插槽的顺序和易变性很重要,那么下面的工作就可以了(对于python2)。在</p>
^{pr2}$
<p>这项研究指出<code>__slots__</code>在几乎所有情况下都是过度杀伤。Guido Van Rossum指出,基于对新样式类中属性查找性能的无根据担忧,它们是一个过早的优化。Guido还声明,<code>__slots__</code>可以减少程序的内存占用,当您需要创建小对象的时候。在</p>
<blockquote>
<p>I feared that all of the changes in the [new] class system were going to have a negative impact on performance. ... Thus the use of <code>__slots__</code> was a way to optimize the lookup of data attributes—a fallback, if you will, in case people were disappointed with the performance impact of the new class system. This turned out unnecessary, but by that time it was of course too late to remove <code>__slots__</code>.</p>
</blockquote>
<p><a href="http://python-history.blogspot.co.uk/2010/06/inside-story-on-new-style-classes.html" rel="nofollow">http://python-history.blogspot.co.uk/2010/06/inside-story-on-new-style-classes.html</a></p>