Python使用type動態(tài)創(chuàng)建類操作示例
本文實例講述了Python使用type動態(tài)創(chuàng)建類操作。分享給大家供大家參考,具體如下:
使用type動態(tài)創(chuàng)建類
動態(tài)語言和靜態(tài)語言最大的不同,就是函數(shù)和類的定義,不是編譯時定義的,而是運行時動態(tài)創(chuàng)建的。
下面看一個例子:
# 定義一個Person類
class Person(object):
def __init__(self):
pass
def say(self):
print('say hello')
p = Person()
p.say() # 輸出 say hello
print(type(p)) # 輸出 <class '__main__.Person'>
print(type(Person)) # 輸出 <class 'type'>
運行結(jié)果:
say hello
<class '__main__.Person'>
<class 'type'>
我們發(fā)現(xiàn),type(Person)輸出的是<class 'type'>是type類型。
type()函數(shù)可以查看一個類型或變量的類型,Person是一個class(類),它的類型是type,而p是一個 Person的實例,它的類型是Person類。
我們說class(類)的定義是運行時動態(tài)創(chuàng)建的,而創(chuàng)建class(類)的方法就是使用type()函數(shù)。
eg:
# 定義一個方法
def func(self, word='hello'):
print('say %s' % word)
Person = type('Person', (object,), dict(say=func)) # 通過type創(chuàng)建Person類
p = Person()
p.say() # 輸出 say hello
print(type(p)) # 輸出 <class '__main__.Person'>
print(type(Person)) # 輸出 <class 'type'>
運行結(jié)果:
say hello
<class '__main__.Person'>
<class 'type'>
type函數(shù)動態(tài)創(chuàng)建類,需要傳入3個參數(shù),分別是:
- 第一個參數(shù):class的名稱
- 第二個參數(shù):繼承的父類集合,注意Python支持多重繼承,如果只有一個父類,別忘了tuple的單元素寫法(tuple單元素寫法
(obj,)); - 第三個參數(shù):class的方法名稱與函數(shù)綁定,這里我們把函數(shù)func綁定到方法名say上。
通過type()函數(shù)創(chuàng)建的類和直接寫class是完全一樣的,因為Python解釋器遇到class定義時,僅僅是掃描一下class定義的語法,然后調(diào)用type()函數(shù)創(chuàng)建出class。
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python面向?qū)ο蟪绦蛟O(shè)計入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
python中subprocess批量執(zhí)行l(wèi)inux命令
本篇文章給大家詳細(xì)講述了python中使用subprocess批量執(zhí)行l(wèi)inux命令的方法,有興趣的朋友參考學(xué)習(xí)下。2018-04-04
使用Pandas對列名和索引進(jìn)行重命名的幾種常見方法
在數(shù)據(jù)分析和處理中,Pandas是一個非常強(qiáng)大的工具,它提供了靈活的數(shù)據(jù)結(jié)構(gòu)和豐富的操作方法,使得數(shù)據(jù)處理變得更加簡單高效,其中,對數(shù)據(jù)的列名和索引進(jìn)行重命名是常見的需求之一,本文將從基礎(chǔ)概念出發(fā),逐步深入探討如何使用Pandas對列名和索引進(jìn)行重命名2024-12-12
教你如何使用Python開發(fā)一個釘釘群應(yīng)答機(jī)器人
在聊天工具大肆侵入我們生活各個方面的今天,各種消息無時無刻不在侵?jǐn)_我們的每一寸時間,這種情況下,一個聊天的機(jī)器人就很有必要了.今天,我們來學(xué)習(xí)一下使用 Python 開發(fā)一個釘釘?shù)膽?yīng)答機(jī)器人,助你「人生苦短,少回消息」,需要的朋友可以參考下2021-06-06
python 獲取當(dāng)前目錄下的文件目錄和文件名實例代碼詳解
這篇文章主要介紹了python 獲取當(dāng)前目錄下的文件目錄和文件名實例代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03
python __init__與 __new__的區(qū)別
本文主要介紹了python __init__與 __new__的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

