python 類中__slots__ 和 @property
- slots
>>> class people(object):
... __slots__ = ['age', 'name’]
限制了people只有age和name的屬性。對比下就知道了。先對age賦值,a,b都正常,在對性別賦值,a直接報錯,因為people加了__slots__限制,只能有age和name例項屬性。為啥要用__slots__呢?效能問題。使用__slots__是有副作用的>>> class all(object): … pass >>> a = people() >>> b = all() >>> >>> a.age = 1 >>> a.age 1 >>> b.age = 2 >>> b.age 2 >>> >>> a.gender = 'male' Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'people' object has no attribute 'gender' >>> b.gender = 'male' >>> b.gender 'male'
1. 每個繼承的子類都要重新定義一遍__slots__
2. 例項只能包含哪些在__slots__定義的屬性,這對寫程式的靈活性有影響,比如你由於某個原因新網給instance設定一個新的屬性,比如instance.a = 1, 但是由於a不在__slots__裡面就直接報錯了,你得不斷地去修改__slots__或者用其他方法迂迴的解決
所以例項不超過萬級別的類,__slots__是不太值得使用的,麻煩啊,還有就是不利於別人閱讀你的程式碼,並不一定pythoner都知道這個屬性啊,還得害人家google瞭解一下。PS:《fluent python》比我狠,說的是小於百萬級別例項不值得使用。2.property
相關推薦
python 類中__slots__ 和 @property
slots 將字串屬性名稱順序賦值給特殊的__slots__類屬性,就可以限制類的例項將有的合法屬性集。這個比較簡單,例如:>>> class people(object): ... __slots__ = ['age', 'name’]限制了peo
【轉】python類中super()和__init__()的區別
【轉】python類中super()和__init__()的區別 單繼承時super()和__init__()實現的功能是類似的 class Base(object): def __init__(self): print 'Base create' class child
python學習(五):Python類中super()和__init__()的關係
1.單繼承時super()和__init__()實現的功能是類似的 class Base(object): def __init__(self): print 'Base create' class childA(Base): def __init__(sel
python 類中變數 和區域性變數和全域性變數
1.類中初始化變數 class dig(): def __init__(self,x,y): self.x=x self.y=y def pd(self
@property在python類中的應用
bject ack style 註意 log 一個 sel 變量 obj 1.在類中,有時需要限制輸入的內容,可以用一個set來輸入需要的內容,用get來取得輸入的內容 2.其實說白,上述所說的方法就是用來檢查輸入內容,讓人們不能隨心所欲的設置了。 參見下面的例子: 1
python類中的self參數和cls參數
ini ls參數 普通 直接 CM 更多 class pytho IV 1. self表示一個類的實例對象本身。如果用了staticmethod就無視這個self了,就將這個方法當成一個普通的函數使用了。 2. cls表是這個類本身。 # 代碼為證 class A
Python類中的單下劃線和雙下劃線的區別
#"單下劃線" 開始的成員變數叫做保護變數,意思是隻有類物件和子類物件自己能訪問到這些變數; #"雙下劃線" 開始的是私有成員,意思是隻有類物件自己能訪問,連子類物件也不能訪問到 #-*-coding:utf8-*- class father(): def __init
python __slots__和@property
前面瞭解了python的面向物件的基本方式https://blog.csdn.net/qq_21294095/article/details/85118247 心中有挺多的疑問,而解決這些疑問就需要用到python更強大的功能了 一,動態繫結這個事兒太隨意了,怎麼限制? __slot
Python類中的"私有欄位"和"私有屬性"
@staticmethod def Forward(): print u'開始向前進'#coding:utf-8 class Car: # 下面是靜態欄位 memo = u'車輛具有出廠合格證' def __init__(self, brand, model, sp
Python類中的屬性和方法總結
類中的屬性分為: 例項屬性 類屬性 類中的方法分為: 例項方法 類方法 靜態方法 類中的屬性 例項屬性: 定義:在類的方法中定義的變數 使用:建立例項物件的時候被建立,能被例項呼叫,無法被類呼叫,可以
python類中的self引數和cls引數
1. self表示一個類的例項物件本身。如果用了staticmethod就無視這個self了,就將這個方法當成一個普通的函式使用了。2. cls表是這個類本身。# 程式碼為證 class A(object): def func1(self): prin
Python——詳解__slots__,property和私有方法
本文始發於個人公眾號:TechFlow,原創不易,求個關注 今天是Python專題的第11篇文章,我們來聊聊面向物件的一些進階使用。 __slots__ 如果你看過github當中一些大牛的程式碼,你會發現很多大牛經常在類的頂部加上__slots__關鍵字。如果你足夠好奇,你可能會試著把這個關鍵字去掉再執行
Python類中反射的作用
屬性 cnblogs argv 字符串 實現 span div init asa #coding:utf-8 ‘‘‘ #反射的基本用法: hasattr 判斷一個方法是否存在於實例中 getattr 指定一個方法名字,獲取該方法的內存地址,加"()"括號並可執行 ‘‘‘
Java sanner類中next和nextLine的區別
浮點 驗證 courier 判斷 回車 nbsp () oid 輸入 next() 與 nextLine() 區別 next(): 1、一定要讀取到有效字符後才可以結束輸入。 2、對輸入有效字符之前遇到的空白,next() 方法會自動將其去掉。 3、只有輸入有效字符後才將其
angular2 標簽中attribute和property
指令 例如 angular 需要 隨著 100% 異同 order rop 原鏈接:http://blog.csdn.net/erciyuan_nuonuo/article/details/60971696 property:dom元素作為對象附加的內容,例如childN
python—類的屬性和方法總結
python一、類的屬性總結(類的屬性定義在方法外,對象的屬性定義在方法內)理解:類的(靜態)屬性:(人類的五官,理解為變量)類的(動態)方法:(人類吃穿住行,理解為一個函數,至少帶一個參數self,指向類本身)對象:類的實例化,之後才能有屬性和方法1)類的屬性,也是公有屬性;類的私有屬性2)對象的公有屬性;
python 類對象和實例對象動態添加方法
sta body elf import cme sel odt ssm gpo 1 class Person(): 2 def __init__(self, name): 3 self.name = name 4 5 6 def p
Python類的繼承和方法重寫總結
python 類繼承和重寫 Python類的繼承和方法重寫總結 我們都知道類可以繼承,通過繼承可以實現代碼的復用,使代碼看起來更加簡潔 比如:Class B(A): Pass 定義了一個名為B的類,它繼承於A,我們把B叫做A的子類,A叫做B的超類(父類)。 方法重寫當子類定義了一個和超類相同名字的方
python類中的一些神奇方法
strong style self. 返回 test int error: turn 引用 __str__:用於在print(對象)時,直接打印__str__的返回值 1 class Animal: 2 def __init__(self, name): 3
python類中的雙下劃線方法
att 他還 ret sel col 只有一個 war span instance __getitem__,__setitem__和__delitem__ 實現了對象屬性的字典化操作。 class Person: def __init__(self, na