python的元類(metaclass)中attrs的使用
metaclass可以使用attrs檢視、修改子類的屬性
其中是class的屬性,不是(建立之後的,self.)物件的
可以從輸出carry在最後看到,Test定義之後馬上生成,而不是等到有語句。
self.d是不存在的,__init__也被看成屬性(attrs),然後也被pop了。
所以在pop完之後,元類的派生類只存在attrs指定的屬性。
其中,帶有self並且是第一個引數的屬於物件的屬性,否則是class的。
程式碼和例子:
class TestMetaclass(type): def __new__(cls, name, bases, attrs): mappings = dict() for k, v in attrs.items(): print(k, v) mappings[k] = v for k in mappings.keys(): attrs.pop(k) attrs['return_str'] = lambda self, p: '%s' % p attrs['c'] = 23 return type.__new__(cls, name, bases, attrs) class Test(object, metaclass = TestMetaclass): a = 'c' b = 1 def __init__(self, d = 4): self.d = d def f(self, p): print(p) print('carry') t = Test() print(t.return_str('fds')) print(Test.c) print(t.d)
結果:
[email protected]:~/Desktop$ python3 test.py __module__ __main__ __qualname__ Test a c b 1 __init__ <function Test.__init__ at 0x7fd83882aae8> f <function Test.f at 0x7fd83882ab70> carry fds 23 Traceback (most recent call last): File "test.py", line 26, in <module> print(t.d) AttributeError: 'Test' object has no attribute 'd'
相關推薦
python的元類(metaclass)中attrs的使用
metaclass可以使用attrs檢視、修改子類的屬性 其中是class的屬性,不是(建立之後的,self.)物件的 可以從輸出carry在最後看到,Test定義之後馬上生成,而不是等到有語句。 self.d是不存在的,__init__也被看成屬性(attrs),然後
python中的元類(metaclass)
優先 裝飾器 target {} pass get tac 搜索 items 認識python中元類的準備工作。 1,首先需要明白一個概念就是python中一切皆為對象。 input: class Trick(object): pass print type(‘1234
深刻理解Python中的元類(metaclass)
1.類也是物件 在理解元類之前,你需要先掌握Python中的類。Python中類的概念借鑑於Smalltalk,這顯得有些奇特。在大多數程式語言中,類就是一組用來描述如何生成一個物件的程式碼段。在Python中這一點仍然成立: >>> class ObjectCreato
理解python中的元類(metaclass)
本文是根據stackoverflow上關於“What are metaclasses in Python?”的回答翻譯總結而成的。原資料連線:https://stackoverflow.com/questions/100003/what-are-metaclasses-in-
Python中的類和元類(metaclass)以及黑魔法(__metaclass__)
一、Python中的類 首先在這裡討論的python類,都是基於新式類進行討論。 在python中,一切皆為物件。 在理解元類之前我們先來重新理解一下python中的類。 class Joker: pass 當Python在執行帶clas
Python技巧:元類(Metaclasses)和利用Type構建的動態類(Dynamic Classes)
`metaclass`和`type`關鍵字在Python程式碼中較少被使用(也正因如此,它們的作用也沒有很好的被理解)。在這篇文章中,我們將探究`type()`的型別(types)和跟`metaclasses`相關的`type`的用法。 這是我的型別麼?首先來看`ty
Python的類(二)
bject class -1 div 所在 公開 nts 被調用 默認 一、類的重寫 對於父類的方法,只要它不符合子類模擬的實物的行為,都可對其進行重寫。為此,可在子類中定義一個這樣的方法,即它與要重寫的父類方法同名。這樣, Python將不會考慮這個父類方法,而只關註
python——元組(tuple)基本操作
name 逗號 print 一個個 gpo 類型 元組 多個 對象 元組被稱為只讀列表,數據可被查詢,但不能被修改,類似於列表的切片操作,元組寫在小括號裏面()元素之前用逗號隔開 對於一些不想被修改的數據,可以用元組來保存 # 創建元組 1)創建空元組 # 創建空元組
python元組(tuple)
strong 第一個 class 返回 eve pos 位置 出現的次數 tro 元組tuple 元組一旦創建後便不可更改 表示方法: name1=("luo","gu","hu") 在一個元組中,可以是字符串,數字或混合型的 一、對於元組操作有以下函數: #1、cmp(n
對類(class)中的已有屬性進行修改方法1
類有時,在類的編寫過程中,可能已經給了某個屬性一個默認值。在之後的使用過程中,我們或許需要更新這個值,可以用如下方法一,對默認值直接進行更新: eg:首先編寫好一個有關汽車的類,其中其中先定義了幾個汽車的初始化值,其中包含一個默認值,為它的公裏數: class Car(): #類的名字都需大寫,並要習慣用""
Python的類(class)和例項(Instance)如何操作使用,
面向物件最重要的概念就是類(Class)和例項(Instance),必須牢記類是抽象的模板,比如Student類,而例項是根據類創建出來的一個個具體的“物件”,每個物件都擁有相同的方法,但各自的資料可能不同。 仍以Student類為例,在Python中,定義類
python Condition類(鎖)
del lap lose bdd 超時 實例 比較 sed ase Condition(條件變量)通常與一個鎖關聯。需要在多個Contidion中共享一個鎖時,可以傳遞一個Lock/RLock實例給構造方法,否則它將自己生成一個RLock實例。 不理解鎖的,請看上一條隨筆。
python元組(tuple)的使用
一、元組基本使用 info_tuple = ("zhangsan", 18, 1.75, "zhangsan") # 1. 取值和取索引 print(info_tuple[0]) # 已經知道資料的內容,希望知道該資料在元組中的索引 print(info_tuple.index(
Python統計列表(List)中的重複項出現的次數並進行排序
學習Python的過程中,你會遇到各種各樣的坑,不要覺得難,當你去踩過就會覺得很簡單了! 正文: 題目概述 對於一個列表,比如List = [1,2,3,4,5,3,2,1,4,5,
Python 元組(Tuples)與列表(List)
Python中Tuples和List都是Sequence資料型別的一種,不同的Tuples的值不能修改,但是我們可以通過拼湊來得到新的元組。 Tuples有個特別的就是在初始化含有0個或者1個元素的元組時,初始化0個元素的元組使用一對空括號(T
python 列表類(list)自帶函式
呼叫help(list)獲得以下資訊: 把一些常用的發上來: | append(...)//把一個元素新增到最後 | L.append(object) -- append object to end | | count(...)//查詢一個元素
Python統計列表(List)中的重復項出現的次數並進行排序
出現 iter 實現 found ict end val ever time 題目概述 對於一個列表,比如List = [1,2,3,4,5,3,2,1,4,5,6,4,2,3,4,6,2,2],現在我們需要統計這個列表中的重復項,統計出重復次數後,按照我們自己的要求進行排
python中的資料型別——元組(tuple)
列表:打了激素的陣列 元組:帶了緊箍咒的列表;不可變資料型別,沒有增刪改查;可以儲存任意資料型別 元組的建立 In [1]: t = (1,1.2,True,'westos') In [2
利用python爬蟲技術動態爬取地理空間資料雲中的元資料(selenium)
python爬取地理空間資料雲selenium動態點選 爬取的網址秀一下: 爬取的資訊是什麼呢? 這個資訊的爬取涉及到右邊按鈕的點選,這屬於動態爬取的範疇,需要用到selenium 好了,那麼開始寫程式碼吧 首先匯入selenium from seleni
使用Python進行層次聚類(二)——scipy中層次聚類的自定義距離度量問題
今天,總結一下如何使用層次聚類演算法裡面的自定義距離度量 層次聚類上次已經總結過。 這次僅僅說明層次聚類的距離引數,這裡的距離引數可以使用自定義函式。 我們進入該函式的文件頁面我們看到linkage的說明文件上面的函式scipy.cluster.hiera