class of class
Python 的 class 屬於 first-class citizen :代表在 Python 中的 class 本身也是個物件, 可以傳遞、修改、賦值等操作。
Builtin Function - type
Python 中有一個特殊的 builtin function:type,本身同時具有兩個功能:回傳物件的型態、
建立一個 type 物件。後者的功能可以用來建立一個 class,這代表 class 本身也會是一個實體 (instance),
透過 type 建立出來的實體。透過 type(name, bases, clsdict)
方式可以建立出一個 class:
因此在 官方文件 中可以看到兩種方式,可以建立出一樣的 class:
>>> class X:
... a = 1
...
>>> X = type('X', (object,), dict(a=1))
metaclass
在 Python3 的
Data Model
可以看到關於實體的各種描述,在 metaclass 章節中介紹如何使用 metaclass。
預設 Python 的每一個 class 都是透過 type
函數來建立,而客製化的 class 可以透過 metaclass 來創建。
像是以下範例就使用 Meta 這個 metaclass 來建立 MyClass,執行程式可以看到 Python 是如何按照順序執行:
class Meta(type):
def __init__(cls, *args):
print(f'initial metaclass for {cls} {args}')
@classmethod
def __prepare__(cls, *args):
print(f'prepare metaclass for {cls} {args}')
return {}
class MyClass(metaclass=Meta):
def __init__(cls, *args):
print(f'initial class on {cls} {args}')
class MySubclass(MyClass):
def __init__(cls, *args):
print(f'initial subclass on {cls} {args}')