python中的type

使用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 小王
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章