python_type函式生成類物件的方法
阿新 • • 發佈:2019-01-22
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