1. 程式人生 > >python_type函式生成類物件的方法

python_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)) <class 'type'> >>> print(type(h)) <class '__main__.Hello'>

定義ListMetaclass,按照預設習慣,metaclass的類名總是以Metaclass結尾,以便清楚地表示這是一個metaclass:

# metaclass是類的模板,所以必須從`type`型別派生:
class ListMetaclass(type):
    def __new__(cls, name, bases, attrs)
:
attrs['add'] = lambda self, value: self.append(value) return type.__new__(cls, name, bases, attrs)

有了ListMetaclass,我們在定義類的時候還要指示使用ListMetaclass來定製類,傳入關鍵字引數metaclass

class MyList(list, metaclass=ListMetaclass):
    pass