WEB开发网
开发学院软件开发Python Python 中的元类编程 阅读

Python 中的元类编程

 2008-09-30 12:43:17 来源:WEB开发网   
核心提示: 而且,不需要使用定制元类来操作类的生成,Python 中的元类编程(2),一种不太费脑筋的概念是 类工厂:一种普通的函数,它可以返回在函数体内动态创建的类,这里要强调的一点是,不仅 实例可以动态地创建,用传统的 Python 语法,您可以编写: 清单 1. 老式的 Python 1.5.2

而且,不需要使用定制元类来操作类的生成。一种不太费脑筋的概念是 类工厂:一种普通的函数,它可以返回在函数体内动态创建的类。用传统的 Python 语法,您可以编写:

清单 1. 老式的 Python 1.5.2 类工厂

Python 1.5.2 (#0, Jun 27 1999, 11:23:01) [...]
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>> def class_with_method(func):
...   class klass: pass
...   setattr(klass, func.__name__, func)
...   return klass
...
>>> def say_foo(self): print 'foo'
...
>>> Foo = class_with_method(say_foo)
>>> foo = Foo()
>>> foo.say_foo()
foo

工厂函数 class_with_method() 动态地创建一个类,并返回该类,这个类包含传递给该工厂的方法/函数。在返回该类之前,在函数体内操作类自身。 new 模块提供了更简洁的编码方式,但其中的选项与类工厂体内定制代码的选项不同,例如:

清单 2. new 模块中的类工厂

>>> from new import classobj
>>> Foo2 = classobj('Foo2',(Foo,),{'bar':lambda self:'bar'})
>>> Foo2().bar()
'bar'
>>> Foo2().say_foo()
foo

在所有这些情形中,没有将类( Foo 和 Foo2 )的行为直接编写为代码,而是用动态参数在运行时调用函数来创建类的行为。这里要强调的一点是,不仅 实例可以动态地创建,而且 类本身也可以动态地创建。

元类:寻求问题的解决方案?

上一页  1 2 3 4 5 6 7  下一页

Tags:Python 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接