一、類是如何產生的
- 表面上使用繼承創建一個類
- 所有類都直接或間接繼承於object
而真正創建類的是type - type
type通常的用法–判斷對象的類型
但除此之外,它最大的用途是來動態的創建類,當Python掃描到class語法的時候,就會調用type函數進行類的創建 - type 創建類
- type()需要接受三個參數
- 1.類的名稱:若不指定也要傳入空字符串
- 2.父類:注意以tuple的形式傳入,沒有也要傳入控tuple:(),默認的是object
- 3.綁定的方法或屬性:注意以dict的形式傳入
# 定義一個父類
class Parent:
def foo(self):
print('Parent')
# 準備一個方法
def say(self):
print('hello')
# 使用type來創建一個類
Person = type('Person',(Parent,),{'name':'person','say':say})
p = Person()
p.foo()
p.say()
# 結果
Parent
hello
元類
- 類 -用來創建對象的模板
- 那麼,元類就是創建類的模板
- type就是一個元類
就連 object 也是由type創建的
哈哈,就連type自己也是type創建的
In [1]: type(type)
Out[1]: type
In [2]: type(object)
Out[2]: type
In [3]: type(int)
Out[3]: type
In [4]: type(str)
Out[4]: type
In [5]: type(bool)
Out[5]: type
In [6]: type(list)
Out[6]: type
- 有點神奇樣
- str:用來創建字符串對象的類
- int:用來創建整數對象的類
- type:用來創建類對象的類
- 等等…
示例
# 繼承type
class Base(type):
def __new__(cls,*args,**kwargs):
print('in Base')
return super().__new__(cls,*args,**kwargs)
class Person(metaclass=Base):
def __init__(self,name):
self.name = name
p = Person('tom')
# 控制檯
in Base