使用type()函數時,如果只傳入一個參數object,那麼將返回該object的類型;
如果分別傳入name,bases,dict這三個參數,那麼type()函數將會創建一個對象;
使用class定義對象的時候,Python解釋器調用type()函數來動態創建對象。
use_type.py
#!usr/bin/python
# -*- coding:utf8 -*-
# class type(name, bases, dict)
x = type('X', (object, ), dict(a=1, say=sum, __doc__="這是type創建的對象"))
print(x.say([1, 2, 3]))
# 除了可以通過type函數判斷對象類型,還可以通過__class__屬性獲取
print(x.__class__) # 父類
print(x.__name__) # 類名
print(x.__bases__) # 基類元組
print(x.__dict__)
print(x.__doc__) # 類的說明
use_type1.py
#!usr/bin/python
# -*- coding:utf8 -*-
"""
當我們使用class定義類的時候,Python解釋器僅僅是掃描一下定義的語法,
然後調用type()函數創建class類。
class A(object):
# 類屬性
role = 'student'
# 實例方法
def __init__(self, name):
# 實例屬性
self.name = name
# 類方法
@classmethod
def study(cls):
pass
# 靜態方法
@staticmethod
def cal_student_num():
pass
"""
# 使用type()函數定義類
# 實例方法
def __init__(self, name):
# 實例屬性
self.name = name
# 類方法
@classmethod
def study(cls):
pass
# 靜態方法
def cal_student_num():
pass
# 元類最大的作用不在於創建一個新的類
# class type(name, bases, dict)
A = type(
'A',
(object, ),
{
'role': 'student',
'__init__': __init__,
'study': study,
'cal_student_num': cal_student_num
}
)
a = A('小王')
print(a.role, a.name) # student 小王