擅长:python、mysql、java
<p>除了类修饰符是否是解决问题的正确方法之外:</p>
<p>在Python2.6及更高版本中,有带@-语法的类装饰器,因此您可以编写:</p>
<pre><code>@addID
class Foo:
pass
</code></pre>
<p>在旧版本中,您可以使用另一种方法:</p>
<pre><code>class Foo:
pass
Foo = addID(Foo)
</code></pre>
<p>但是请注意,这与函数decorators的工作原理相同,decorator应该返回新的(或修改过的原始)类,这不是您在示例中所做的。addID装饰器如下所示:</p>
<pre><code>def addID(original_class):
orig_init = original_class.__init__
# Make copy of original __init__, so we can call it without recursion
def __init__(self, id, *args, **kws):
self.__id = id
self.getId = getId
orig_init(self, *args, **kws) # Call the original __init__
original_class.__init__ = __init__ # Set the class' __init__ to the new one
return original_class
</code></pre>
<p>然后,您可以为您的Python版本使用适当的语法,如上所述。</p>
<p>但我同意其他人的看法,如果您想重写<code>__init__</code>,继承更适合。</p>