电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

詳解如何創(chuàng)建Python元類

瀏覽:4日期:2022-06-18 18:47:57
目錄什么是Python元類?Python中的類和對象Python中的動(dòng)態(tài)類Python元類如何工作?類型類Python中的自定義元類Python中的__call__是什么?裝飾器vs元類什么是Python元類?

Python元類是與Python的面向?qū)ο缶幊谈拍钕嚓P(guān)的高級功能之一。它確定類的行為,并進(jìn)一步幫助其修改。

詳解如何創(chuàng)建Python元類

用Python創(chuàng)建的每個(gè)類都有一個(gè)基礎(chǔ)的Metaclass。因此,在創(chuàng)建類時(shí),您將間接使用元類。它隱式發(fā)生,您無需指定任何內(nèi)容。

與元編程相關(guān)聯(lián)的元類決定了程序?qū)ζ渥陨磉M(jìn)行操作的能力。 學(xué)習(xí)元類可能看起來很復(fù)雜,但是讓我們先從一些類和對象的概念入手,以便于理解。

Python中的類和對象

類是一個(gè)藍(lán)圖,是具有對象的邏輯實(shí)體。 一個(gè)簡單的類在聲明時(shí)沒有分配任何內(nèi)存,它是在創(chuàng)建一個(gè)類的實(shí)例時(shí)發(fā)生的。

通過創(chuàng)建的對象,可以訪問該類。該類僅用作模板。對象的屬性本質(zhì)上意味著我們可以在運(yùn)行時(shí)與它進(jìn)行交互,傳遞諸如變量之類的參數(shù),進(jìn)行存儲,修改,也可以與它進(jìn)行交互。

可以使用__class__屬性檢查對象的類。讓我們看一個(gè)簡單的例子:

class Demo:pass #This is a class named demo test=Demo()print(test.__class__) #shows class of objprint(type(test)) #alternate method

Output: <class ’__main__.Demo’>

Python大量處理類和對象的概念,并允許輕松,順利地進(jìn)行應(yīng)用程序開發(fā)。但是,什么使Python與Java和C這樣的語言不同呢?Python中的所有內(nèi)容都可以定義為具有屬性和方法的對象。主題演講是Python中的類不過是更大類的另一個(gè)對象。

詳解如何創(chuàng)建Python元類

類為對象定義規(guī)則。同樣,元類負(fù)責(zé)為類分配行為。我們已經(jīng)知道,類是對象,就像每個(gè)對象都有一個(gè)實(shí)例一樣,類是元類的實(shí)例。

但是也有像Ruby和Objective-C這樣的語言也支持元類。那么,是什么使Python Metaclass更好,為什么還要學(xué)習(xí)它呢?答案是Python中的動(dòng)態(tài)類。讓我們仔細(xì)看看。

Python中的動(dòng)態(tài)類

Python是一種動(dòng)態(tài)編程語言,并允許在運(yùn)行時(shí)創(chuàng)建類。與C ++等其他語言不同,后者僅允許在編譯時(shí)創(chuàng)建類。在靈活性方面,Python優(yōu)于其他靜態(tài)類型的語言。

動(dòng)態(tài)和靜態(tài)類型語言之間的差異并不大, 但是在Python中,它由于提供元編程而變得更加有用。

但是,如果我告訴您還有另一個(gè)關(guān)鍵功能將Python與其他編程語言區(qū)分開呢?

諸如Java或C ++之類的語言具有float,char,int等數(shù)據(jù)類型,而Python將每個(gè)變量視為對象。每個(gè)對象都屬于一個(gè)類,例如int類或str類。您可以使用稱為type()的內(nèi)置函數(shù)來簡單地檢查任何變量的類。

number = 10993print('Type associated is:', type(number))name = 'Aishwarya'print('Type associated is:', type(name))

Output:

Type associated is: <class ’int’>

Type associated is: <class ’str’>

現(xiàn)在,您了解了Python中的所有內(nèi)容都有與之關(guān)聯(lián)的類型。在下一個(gè)主題中,我們將嘗試了解元類實(shí)際上是如何工作的。

Python元類如何工作?

每當(dāng)創(chuàng)建一個(gè)類時(shí),都會(huì)調(diào)用默認(rèn)的Metaclass類型。 元類包含名稱,基類集以及與該類關(guān)聯(lián)的屬性等信息。因此,在實(shí)例化一個(gè)類時(shí),將調(diào)用帶有這些參數(shù)的類。可以通過兩種方法創(chuàng)建元類:

類型類 自定義元類

讓我們繼續(xù)輸入class以及如何創(chuàng)建class。

類型類

Python有一個(gè)稱為type的內(nèi)置元類。與Java或C不同,那里有主要的數(shù)據(jù)類型。Python中的每個(gè)變量或?qū)ο蠖加幸粋€(gè)與之關(guān)聯(lián)的類。Python使用幕后的Type類創(chuàng)建所有類。在上一個(gè)主題中,我們看到了如何使用type()檢查對象的類。讓我們舉一個(gè)例子,說明如何通過創(chuàng)建一個(gè)簡單的類來定義新類型。

class Edureka():obj = Edureka() print(type(obj))

Output: <class ’__main__.Edureka’>

print(type(Edureka))

Output: <class ’type’>

在上面的代碼中,我們有一個(gè)名為Edureka的類,以及一個(gè)關(guān)聯(lián)的對象。我們通過簡單地在該類型之后創(chuàng)建一個(gè)名為自身的類,創(chuàng)建了一個(gè)名為Edureka的新類型。在第二個(gè)代碼中,當(dāng)我們檢查Edureka類的類型時(shí),其結(jié)果為“類型”。

因此,除非另有定義,否則元類使用類型類來創(chuàng)建所有其他類。我們可以通過兩種方法訪問Type類:

詳解如何創(chuàng)建Python元類

當(dāng)我們通過類型類傳遞參數(shù)時(shí),它使用以下語法。

type(__name__, __base__, attributes) 名稱是一個(gè)字符串,并帶有類名 該基礎(chǔ)是一個(gè)元組,可幫助創(chuàng)建子類 屬性是字典,并分配鍵值對

由于Python中的類的行為與對象相似,因此可以用相同的方式更改其行為。我們可以在類內(nèi)添加或刪除方法,類似于對對象的處理方式。

現(xiàn)在您已經(jīng)知道Metaclass在Python中創(chuàng)建了所有其他類,并使用類型class定義了它們的行為。但是,您一定想知道,我們還有其他方法可以創(chuàng)建元類嗎?因此,讓我們看看如何創(chuàng)建一個(gè)自定義的元類。

Python中的自定義元類

現(xiàn)在我們知道并理解類型類如何工作。現(xiàn)在該學(xué)習(xí)如何創(chuàng)建自定義元類了。我們可以通過執(zhí)行動(dòng)作或代碼注入來修改類的工作。為此,我們可以在創(chuàng)建類定義時(shí)將Metaclass作為關(guān)鍵字傳遞。另外,我們可以通過簡單地繼承通過此Metaclass關(guān)鍵字實(shí)例化的類來實(shí)現(xiàn)此目的。

在創(chuàng)建新類時(shí),Python查找__metaclass__關(guān)鍵字。以防萬一,如果不存在。它遵循類型類層次結(jié)構(gòu)。

詳解如何創(chuàng)建Python元類

Python在命名空間中執(zhí)行所有字典后,將調(diào)用類型對象,后者創(chuàng)建類的對象。我們可以使用兩種方法來創(chuàng)建自定義元類。

詳解如何創(chuàng)建Python元類

class EduFirst(type):def __new__(cls, name, base_cls, dict):passclass EduSecond(type):def __init__(self, name, base_cls, dict):pass

讓我詳細(xì)解釋這兩種方法:

__new __():當(dāng)用戶要在類創(chuàng)建之前定義元組字典時(shí)使用。它返回一個(gè)類的實(shí)例,并且很容易覆蓋/管理對象流。 __init __():在創(chuàng)建對象并對其進(jìn)行初始化之后調(diào)用它。Python中的__call__是什么?

在正式的Python文檔中,__call__方法可用于定義自定義元類。同樣,當(dāng)調(diào)用類定義自定義行為時(shí),我們可以覆蓋__prepare__之類的其他方法。

就像類如何像創(chuàng)建對象的模板一樣,元類也像類創(chuàng)建模板一樣。因此,元類也稱為類工廠。

請參見下一個(gè)示例:

class Meta(type):def __init__(cls, name, base, dct):cls.attribute = 200class Test(metaclass = Meta):passTest.attribute

Output: 200

元類允許自定義類。還有多種其他有效且簡單得多的方法可以通過這些方法實(shí)現(xiàn)相同的輸出。這樣的例子之一就是使用裝飾器。

裝飾器vs元類

Decorator是Python的一項(xiàng)流行功能,它允許您向代碼中添加更多功能。裝飾器是可調(diào)用的對象,可幫助修改現(xiàn)有的類甚至函數(shù)。在編譯期間,部分代碼將調(diào)用并修改另一部分。此過程也稱為元編程。

詳解如何創(chuàng)建Python元類

def decorator(cls):class NewClass(cls):attribute = 200 return NewClass@decoratorClass Test1: pass@decorator Class Test2: passTest1.attribute Test2.attribute

Output: 200

Python中的Decorator是一個(gè)非常有用且功能強(qiáng)大的工具,可幫助您更改函數(shù)的行為,而無需實(shí)際更改任何代碼。 當(dāng)您要在調(diào)試時(shí)修改程序的一部分而不是重寫函數(shù)或更改整個(gè)程序時(shí),這非常方便。取而代之的是,您只需編寫一個(gè)單行裝飾器,其余的就由它來處理。

以上就是詳解如何創(chuàng)建Python元類的詳細(xì)內(nèi)容,更多關(guān)于如何創(chuàng)建Python元類的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 手持式线材张力计-套帽式风量罩-深圳市欧亚精密仪器有限公司 | 中图网(原中国图书网):网上书店,尾货特色书店,30万种特价书低至2折! | 手持式3d激光扫描仪-便携式三维立体扫描仪-北京福禄克斯 | 低粘度纤维素|混凝土灌浆料|有机硅憎水粉|聚羧酸减水剂-南京斯泰宝 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 视觉检测设备_自动化检测设备_CCD视觉检测机_外观缺陷检测-瑞智光电 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 冷藏车-东风吸污车-纯电动环卫车-污水净化车-应急特勤保障车-程力专汽厂家-程力专用汽车股份有限公司销售二十一分公司 | 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 微波萃取合成仪-电热消解器价格-北京安合美诚科学仪器有限公司 | 塑料薄膜_PP薄膜_聚乙烯薄膜-常州市鑫美新材料包装厂 | 杰福伦_磁致伸缩位移传感器_线性位移传感器-意大利GEFRAN杰福伦-河南赉威液压科技有限公司 | 双段式高压鼓风机-雕刻机用真空泵-绍兴天晨机械有限公司 | 培训中心-翰香原香酥板栗饼加盟店总部-正宗板栗酥饼技术 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 联系我们-腾龙公司上分客服微信19116098882 | 管理会计网-PCMA初级管理会计,中级管理会计考试网站 | 硅胶管挤出机厂家_硅胶挤出机生产线_硅胶条挤出机_臣泽智能装备 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 变频器维修公司_plc维修_伺服驱动器维修_工控机维修 - 夫唯科技 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 嘉兴泰东园林景观工程有限公司_花箱护栏 | 【同风运车官网】一站式汽车托运服务平台,验车满意再付款 | 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 浙江美尔凯特智能厨卫股份有限公司 | 薄壁轴承-等截面薄壁轴承生产厂家-洛阳薄壁精密轴承有限公司 | 破碎机_上海破碎机_破碎机设备_破碎机厂家-上海山卓重工机械有限公司 | 西门子伺服电机维修,西门子电源模块维修,西门子驱动模块维修-上海渠利 | 中天寰创-内蒙古钢结构厂家|门式刚架|钢结构桁架|钢结构框架|包头钢结构煤棚 | 三防漆–水性三防漆–水性浸渍漆–贝塔三防漆厂家 | 高压互感器,电流互感器,电压互感器-上海鄂互电气科技有限公司 | 鼓风干燥箱_真空烘箱_高温干燥箱_恒温培养箱-上海笃特科学仪器 | 韦伯电梯有限公司 | 重庆LED显示屏_显示屏安装公司_重庆LED显示屏批发-彩光科技公司 重庆钣金加工厂家首页-专业定做监控电视墙_操作台 | 台式恒温摇床价格_大容量恒温摇床厂家-上海量壹科学仪器有限公司 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | 砖机托板价格|免烧砖托板|空心砖托板厂家_山东宏升砖机托板厂 | 【MBA备考网】-2024年工商管理硕士MBA院校/报考条件/培训/考试科目/提前面试/考试/学费-MBA备考网 | 广东佛电电器有限公司|防雷开关|故障电弧断路器|智能量测断路器 广东西屋电气有限公司-广东西屋电气有限公司 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 精密模具制造,注塑加工,吹塑和吹瓶加工,EPS泡沫包装生产 - 济南兴田塑胶有限公司 | 超声波清洗机_大型超声波清洗机_工业超声波清洗设备-洁盟清洗设备 |