python如何派生內建不可變型別並修改例項化行為

2022-10-04 20:12:21 字數 847 閱讀 5075

案例:

我們想要自定義新類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...