本文實例為大家分享了python派生內置不可變類型并修改實例化行為的具體代碼,供大家參考,具體內容如下
案例:
我們想要自定義新類型的元組,對傳入的可迭代對象我們只保留其中的int類型并且值大于0的元素,如下:
[1, -2, 'xxx', 7, [1, 'oo'], 9] >> (1, 7, 9)
如何實現?
1、自定義一個類,繼承tuple類
2、重寫__new__,類方法,new方法是對參數進行實例操作,在此之間,對實例參數進行預操作,修改實例化行為(new方法先于init方法)
3、重寫new方法,把參數變成生成式,傳回本類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/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 ) # cls為這個類本身,把參數g交給這個類本身 return super (IntTuple, cls ).__new__( cls , g) def __init__( self , iterable): pass if __name__ = = "__main__" : l = [ 1 , - 2 , 'xxx' , 7 , [ 1 , 'oo' ], 9 ] result = IntTuple(l) print (result) |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/2bjiujiu/p/7286493.html