擅长:python、mysql、java
<p>没有人解释过可以动态定义类。因此,您可以使用decorator来定义(并返回)子类:</p>
<pre><code>def addId(cls):
class AddId(cls):
def __init__(self, id, *args, **kargs):
super(AddId, self).__init__(*args, **kargs)
self.__id = id
def getId(self):
return self.__id
return AddId
</code></pre>
<p>它可以在Python 2中使用(Blckknght的注释解释了为什么您应该在2.6中继续这样做),如下所示:</p>
<pre><code>class Foo:
pass
FooId = addId(Foo)
</code></pre>
<p>在类似于Python 3的程序中(但是要小心在类中使用<code>super()</code>):</p>
<pre><code>@addId
class Foo:
pass
</code></pre>
<p>所以你可以让你的蛋糕<em>和</em>吃它-继承<em>和</em>装饰师!</p>