python基础-使用元类

使用元类

type()——动态创建class

我们定一个Hello的class,当Python解释器载入hello模块时,就会一次执行该模块的所有语句,执行结果就是动态创建一个Hello的class对象,测试如下

# 显示
class Hello(object):
    def hello(self, name='world'):
        print('Hello, %s.' % name)
>>> from hello import Hello
>>> h = Hello()
>>> h.hello()
Hello, world.
>>> print(type(Hello))

>>> print(type(h))

我们说class的定义是运行时动态创建的恶,而创建class的方法就是使用type()函数

type函数既可以返回一个对象的类型,又可以创建出新的类型,比如,我们可以通过type()函数类创建出Hello类,而无需通过class Hello(object)……的定义:

>>> def fn(self, name='world'): # 先定义函数
...     print('Hello, %s.' % name)
...
>>> Hello = type('Hello', (object,), dict(hello=fn)) # 创建Hello class
>>> h = Hello()
>>> h.hello()
Hello, world.
>>> print(type(Hello))

>>> print(type(h))

要创建一个class对象,type()函数依次传入3个参数:

  1. class的名称
  2. 继承的父类集合,注意Python支持多重继承,如果只有一个父类,别忘了tuple的单元素写法;
  3. class的方法名称与函数绑定,这里我们把Hanns乎fn绑定到方法名hello上。

metaclass

除了使用type()动态创建类之外,要控制类的创建行为,还可以使用metaclass。

以后有时间,再了解

你可能感兴趣的:(python,java,前端)