程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python實現派生內置不可變類型

編輯:Python

1、如何派生內置不可變類型並修改其實例化行為?

        實際案例:

                我們想自定義一種新類型的元組,對於傳入的可迭代對象,只保留其中int類型且值大於0的元素,例如:IntTuple([1, -1, 'abc', 6, ['x', 'y'], 3]) => (1, 6, 3)。

                派生IntTuple新類型目的就是改變內置元組的實例化行為,因為內置元組傳入[1, -1, 'abc', 6, ['x', 'y'], 3]可迭代對象之後,每一個元素都將進入到元組當中目前不是所希望的。

                要求IntTuple是內置tuple的子類,如何實現?

        解決方案:

                定義類IntTuple繼承內置tuple,並實現__new__,修改實例化行為。

2、代碼演示

class IntTuple(tuple): # 繼承內置tuple
# 靜態構造方法,__new__會先於__init__被調用
# 實現tuple的過濾,cls為類對象
def __new__(cls, iterable):
# 使用生成器解析,過濾非int且小於0的數據
g = (x for x in iterable if isinstance(x, int) and x > 0)
return super(IntTuple, cls).__new__(cls, g)
t = IntTuple([1, -1, 'abc', 6, ['x', 'y'], 3])
print(t)
# 輸出結果:
(1, 6, 3)


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved