案例:
我們想要自定義新類www.cppcns.com型的元組,對傳入的可迭代物件我們只保留其中的int型別並且值大於0的元素,如下:
[1, -2, '***', 7, [1, 'oo'], 9] >> (1, 7, 9)
如何實現?
1、自定義乙個類,繼承tuple類
2、重寫__new__,類方法,new方法是對引數進行例項操作,在此之間,對例項引數進行預操作,修改例項化行為(new方法先於init方法)
3、重寫new方法zroydv,把引數變成生成式,傳回本類
#!/usr/bin/python3
class inttuple(tuple):
def __new__(cls, iterable):
# new方法是init方法之前進行呼叫的方法
# 生成乙個生成式
g = (x for x in iterable if isinstance(x, int) and x > 0)
www.cppcns.com
# cls為這個類本身,把引數g交給這個類本身
return super(inttuple, cls).__new__(cls, g)
def __init__(self, iterable):
www.cppcns.com pass
if __name__ == "__main__":
l = [1, -2, '***', 7, [1, 'oo'], 9]
resul程式設計客棧t = inttuple(l)
print(result)
本文標題: python如何派生內建不可變型別並修改例項化行為
本文位址:
Python之派生內建不可變型別並修改其實例化行為
new 方法是建立物件的方法 此處重寫了父類的方法 需呼叫父類的 new 方法建立物件 需將物件返回出來給 init 方法 class demo object def new cls,args,kwargs 重寫父類方法 print new new print object new cls main...
python可變與不可變
可變與不可變型別的實質實際上就是儲存機制的不同 不可變型別 比如字串 被稱為不可變的字串行,每個字元底層均有規範的unicode碼對應,記憶體規定無法對單一的乙個字元進行修改,要修改字串必須重新指向乙個全新的字串 可變型別 一方面,該列表可以保證在位址不變的前提下,改變列表內容 另一方面,該引用也可...
python可變與不可變
不可變作用和意義 物件所指的記憶體中的值是可以改變的。變數名儲存的是乙個位址,該位址指向乙個具體的物件,並且不管對變數的值進行怎樣的操作,都不會改變變數名的儲存位址。字典dict 列表list 集合set 1.list list1 1 2,3 4 print list1,id list1 1,2,3...