[問題] class.__new__ 使用疑問

看板Python作者 (逆道者)時間6年前 (2018/12/09 23:52), 6年前編輯推噓2(206)
留言8則, 1人參與, 6年前最新討論串1/1
今天在網路上查到 想要讓class物件直接回傳東西,可以用__new__的方法來達成 不過使用了之後發現,在該class下面寫的函數都會失效 以下是範例程式(使用Python2): class MyList(object): def __new__(cls,input_list): return input_list def __init__(self,input_list): self.input_list=input_list def Sum(self): return sum(self.input_list) li=MyList([1,2,3]) print li # [1, 2, 3] print li.Sum # AttributeError 請問該如何改寫才正確呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.14.177.165 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1544370755.A.BA4.html

12/10 00:07, 6年前 , 1F
把__new__和__init__想成是初始化物件的不同階段
12/10 00:07, 1F

12/10 00:07, 6年前 , 2F
通常是因為繼承然後又想修改derived class的行為
12/10 00:07, 2F

12/10 00:07, 6年前 , 3F
大部分的情況用到__new__是anti pattern
12/10 00:07, 3F

12/10 00:10, 6年前 , 4F
至於改寫,你沒有說明你期待的功能是什麼?
12/10 00:10, 4F
感謝回覆 我對專業術語還比較陌生,可能用詞上會有錯誤 以上面的範例來說,我希望可以重新定義一個類別 這個類別可以直接返回一個list 而印出他的 list.Sum 時,可以有返回sum(list)的效果,也就是加總裡面所有的數字 ※ 編輯: papple23g (101.14.177.165), 12/10/2018 00:21:45

12/10 00:26, 6年前 , 5F
抱歉我前面說錯 修改回傳instance的行為 但通常跟繼承有
12/10 00:26, 5F

12/10 00:26, 6年前 , 6F
12/10 00:26, 6F

12/10 00:33, 6年前 , 7F
你想做的叫built-in types subclassing
12/10 00:33, 7F

12/10 00:33, 6年前 , 8F
原來如此,非常感謝解答<(_ _)> ※ 編輯: papple23g (101.14.177.165), 12/10/2018 00:46:36
文章代碼(AID): #1S3Jf3ka (Python)
文章代碼(AID): #1S3Jf3ka (Python)