元類被稱為 Python 中的“深奧的巫術“

'''
元類被稱為 Python 中的“深奧的巫術”。盡管你需要用到它的地方極少(除非你基于 zope 編程),可事實上它的基礎理論其實令人驚訝地易懂。

一切皆對象
一切都有類型

?“class”和“type”之間本質上并無不同
類也是對象
它們的類型是 type
以前,術語 type 用于內置類型,而術語 class 用于用戶定義的類,但自 Pythoon 2.2 以來“class”和“type”本質上并無不同。

對于舊風格(old-style)類的類型是 types.ClassType

類的類是……

它的元類……

就像對象是類的實例一樣,類是它的元類的實例。

調用元類可以創建類。

確切來說,Python 中的其它對象也是如此。

因此當你創建一個類時……

解釋器會調用元類來生成它……

定義一個繼承自 object 的普通類意味著調用 type 來創建它:
'''


a = 10  # a是整型對象
print(type(a))  # <class 'int'>class Person:passp = Person()
print(type(p))#
print(type(int))  # <class 'type'>
print(type(Person))#
# class Student:
#     '''
#      這個是一個學生類
#     '''
#     type1 = '學生'
#
#     def __init__(self, name):
#         self.name = name
#
#
# s = Student('tom')
# print(Student.__dict__)Student = type('Student', (object,), {'type1': '學生類'})
print(type(Student))
s = Student()
print(s)print(type(object))class ListMetaclass(type):def __new__(cls, name, bases, attrs):print(name)print(bases)print(attrs)attrs['b'] = 'world'if attrs.get('test'):attrs.pop('test')return type.__new__(cls, name, bases, attrs)class MyList(object, metaclass=ListMetaclass):a = 'hello'def test(self):print('---->test')l = MyList()
print(l)
print(l.a)
# print(l.b)
l.test()'''type()  ----> 用來構建所有類型的類用法:1.type(對象)   ----》 返回的是對象的類型2.type(name,bases,attrs)  ----> name 類名   bases: tuple保存的是所有的父類  attrs:{} 字典   類中的所有的屬性   所有的類底層都是經過type構建出來的。自定義元類:class xxx(type):def __new__(cls,name,bases,attrs):do something....return type.__new__(cls,name,bases,attrs)class Student(父類,metaclass=xxx):pass元類它只做了三件事:攔截類的創建修改類返回修改之后的類'''

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456649.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456649.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456649.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習之必知開源數據集

之前看到的不錯的文章&#xff0c;玩機器學習數據是關鍵&#xff0c;有了這些東西&#xff0c;你就不必再為沒有數據而苦惱。 轉自&#xff1a;https://www.toutiao.com/i6432197108580745730/ 目錄UCIGoogleTrendsKaggleAWS公用數據集ImagenetMINIST/r/數據集其他數據集 目錄…

PHP中header函數的用法及其注意重點是什么呢

1、使用header函數進行跳轉頁面&#xff1b; header(Location:.$url);  其中$url就是將要跳轉的url了。 這種用法的注意事項有以下幾點&#xff1a; ?Location和":"之間不能有空格&#xff0c;否則會出現錯誤&#xff08;注釋&#xff1a;我剛測試了&#xff0c;在…

《計算機科學概論》—第3章3.3節文本表示法

本節書摘來自華章出版社《計算機科學概論》一書中的第3章&#xff0c;第3.3節文本表示法&#xff0c;作者&#xff3b;美]內爾黛爾&#xff08;Nell Dale&#xff09;約翰路易斯&#xff08;John Lewis&#xff09;&#xff0c;更多章節內容可以訪問云棲社區“華章計算機”公眾…

習題

# -*- coding: utf-8 -*- # Time : 2019/08/08 17:38 # Author : Liu # File : zuoye.py# 一、 # 將此功能定義成一個函數&#xff0c; # 電腦隨機生成1~100隨機數&#xff0c;用戶輸入一個數字&#xff0c;電腦提示用戶大或者小&#xff0c;猜錯&#xff0c;繼續提示&a…

經典技術面試指南

目錄計算機基礎知識數據結構算法操作系統計算機網絡數據庫海量數據處理C語言基礎Java基礎Java高級Java Web設計模式知識的綜合能力工具使用項目相關技術熱情表達能力思考方式其他推薦閱讀 目錄 最近看到一份不錯的面試總結&#xff0c;也是每位程序猿都應該掌握的基礎&#x…

Linux 共享內存詳解一

共享內存段被多個進程附加的時候&#xff0c;如果不是所有進程都已經調用shmdt&#xff0c;那么刪除該共享內存段時&#xff0c;會出現一個臨時的不完整的共享內存段&#xff08;key值是0&#xff09;&#xff0c;無法徹底刪除。只有當所有進程都調用shmdt&#xff0c;這個臨時…

python 魔術方法

python 魔術方法 常用魔術方法 魔術方法就是一個類的特殊方法&#xff0c;和普通方法唯一的不同時&#xff0c;普通方法需要調用&#xff01;而魔術方法由系統自動調用。 1.__init__ 初始化魔術方法 觸發時機&#xff1a;初始化對象時觸發&#xff08;不是實例化觸發&#xf…

Storm ack和fail機制再論

之前對這個的理解有些問題&#xff0c;今天用到有仔細梳理了一遍&#xff0c;記錄一下 首先開啟storm tracker機制的前提是&#xff0c; 1. 在spout emit tuple的時候&#xff0c;要加上第3個參數messageid 2. 在配置中acker數目至少為1 3. 在bolt emit的時候&#xff0c;要加…

Storm編程模型總結

目錄前言&#xff1a;1、Storm編程模型2、對應的的WordCount案例總結&#xff1a; 目錄 前言&#xff1a; 對于Storm的編程模型有必要做一個詳細的介紹&#xff08;配合WC案例來介紹&#xff09; 1、Storm編程模型 上圖中組件的解釋&#xff1a; DataSource&#xff1a;外…

13_觀察者模式

【觀察者模式】 也叫作發布/訂閱模式&#xff0c;使用較為頻繁。 定義了對象間一種一對多的依賴關系&#xff0c;當一個對象改變狀態時&#xff0c;則所有依賴于它的對象都會得到通知并被自動更新。 觀察者模式由以下幾個角色組成&#xff1a; * Subject 被觀察者 定義被觀察者…

【python】內建異常類的層次

內建異常類的層次 BaseException-- SystemExit-- KeyboardInterrupt-- GeneratorExit-- Exception-- StopIteration-- StopAsyncIteration-- ArithmeticError| -- FloatingPointError| -- OverflowError| -- ZeroDivisionError-- AssertionError-- AttributeError-- …

《黑客秘笈——滲透測試實用指南》—第2章2.3節 外部或內部的主動式信息收集...

本節書摘來自異步社區《黑客秘笈——滲透測試實用指南》一書中的第2章2.3節 外部或內部的主動式信息收集&#xff0c;作者【美】Peter Kim&#xff08;彼得 基姆&#xff09;,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.3 外部或內部的主動式信息收集黑客秘笈——…

Storm集群的安裝及簡單使用

目錄前言&#xff1a;1、集群部署的基本流程2、Storm常用操作命令&#xff08;了解&#xff09;3、Storm集群的進程及日志熟悉&#xff08;知道對應的日志的位置出了問題知道去哪找原因&#xff09;4、Storm源碼目錄分析&#xff08;重要&#xff09;總結&#xff1a; 目錄 前…

【python】錯誤、異常和文件---復習筆記

錯誤、異常和文件 1. 異常處理 錯誤指的是代碼有語法問題&#xff0c;無法解釋運行&#xff0c;必須改正后才能運行 如果代碼沒有語法問題&#xff0c;可以運行&#xff0c;但會出運行時的錯誤&#xff0c;例如除零錯誤&#xff0c;下標越界等問題&#xff0c;這種在運行期間…

關于使用百度ueditor時的一些問題

本來這些問題直接在百度貼吧里回答不就完事了,可是好死不死的,百度貼吧里老出現 未知錯誤&#xff0c;錯誤號&#xff1a;230274 看來還是算了,自己做一個隨筆記錄一下好了 關于我們獲取里面的內容時,老是會有一個<p>來包著,而且還老是多出來一個<br/> 這邊是這么處…

Storm的通信機制

目錄前言&#xff1a;1、Worker進程間通信原理2、Worker進程間技術(Netty、ZeroMQ)3、Worker 內部通信技術(Disruptor)總結&#xff1a; 目錄 前言&#xff1a; 這篇文章&#xff0c;博客主要介紹下Storm中Worker進程間和進程內部通信的原理和技術。整篇內容僅供了解&#x…

《Windows PowerShell實戰指南(第2版)》——1.4 搭建自己的實驗環境

本節書摘來自異步社區《Windows PowerShell實戰指南&#xff08;第2版&#xff09;》一書中的第1章&#xff0c;第1.4節&#xff0c;作者&#xff1a;【美】Don Jones&#xff08;道瓊斯&#xff09; , Jeffery Hicks&#xff08;杰弗瑞希克斯&#xff09;著&#xff0c;更多章…

已解決]求問not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9為什么不等于0呢???

not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9 ----> (not 1&#xff09;)or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9) ----> 0 or 0 or 4 or 6 or 9 ----> 0 or 4 or 6 or 9 ----> 4 or 6 or 9 4

C#外圍工具資源

1、MATH.NET數學庫:可以用于 矩陣計算方程求根插值擬合。。。2、轉載于:https://www.cnblogs.com/liq07lzucn/p/6227443.html

Storm程序的并發機制原理總結

文章目錄目錄前言&#xff1a;1、概念2、配置并行度總結&#xff1a;目錄 前言&#xff1a; 為了在以后的實踐中提高Storm程序執行的效率&#xff0c;我們還是有必要了解下對應的Storm程序的并發機制。&#xff08;哈哈&#xff0c;雖然以博主小菜鳥的水平還沒有接觸到這種提…