擅长:python、mysql、java
<p>要做一些接近你想要的事情而不是另一种方法,你可以使用如下方法:</p>
<pre><code>CLASS_TEMPLATE = """
class {name}(object):
def __init__(self):
super({name}, self).__init__('{name}')
"""
def main():
name = "SimplePhysicsObject"
exec CLASS_TEMPLATE.format(name=name)
print locals()[name]
if __name__ == '__main__':
main()
</code></pre>
<p>这对python2.7有效。(当您使用旧的<code>super()</code>语法时)如果您使用的是python3.2,您可以查看<a href="http://docs.python.org/library/collections.html?highlight=collections.namedtuple#collections.namedtuple" rel="nofollow">^{<cd2>}</a>的实现,该实现还动态地创建类,以了解如何使用新的<a href="http://docs.python.org/py3k/library/functions.html?highlight=exec#exec" rel="nofollow">^{<cd3>}</a>函数。在</p>
<p>重要的一点是,这不是一个真正的宏,它不会在“编译器”处理它之前扩展到类定义中。它将返回一个新的<code>type</code>对象,这取决于您确保它进入正确的名称空间。在</p>