擅长:python、mysql、java
<p>我想出了一个类装饰器的实现。我使用的是python2.5,所以我还没有用decorator语法对它进行实际测试(这很好),而且我不确定它的功能是否正确。但看起来像这样:</p>
<p>在pycategories.py在</p>
<pre><code>"""
This module implements Obj-C-style categories for classes for Python
Copyright 2009 Ulrik Sverdrup <ulrik.sverdrup@gmail.com>
License: Public domain
"""
def Category(toclass, clobber=False):
"""Return a class decorator that implements the decorated class'
methods as a Category on the class @toclass
if @clobber is not allowed, AttributeError will be raised when
the decorated class already contains the same attribute.
"""
def decorator(cls):
skip = set(("__dict__", "__module__", "__weakref__", "__doc__"))
for attr in cls.__dict__:
if attr in toclass.__dict__:
if attr in skip:
continue
if not clobber:
raise AttributeError("Category cannot override %s" % attr)
setattr(toclass, attr, cls.__dict__[attr])
return cls
return decorator
</code></pre>