看板 Python 關於我們 聯絡資訊
今天在網路上查到 想要讓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
ThxThx: 把__new__和__init__想成是初始化物件的不同階段 12/10 00:07
ThxThx: 通常是因為繼承然後又想修改derived class的行為 12/10 00:07
ThxThx: 大部分的情況用到__new__是anti pattern 12/10 00:07
ThxThx: 至於改寫,你沒有說明你期待的功能是什麼? 12/10 00:10
感謝回覆 我對專業術語還比較陌生,可能用詞上會有錯誤 以上面的範例來說,我希望可以重新定義一個類別 這個類別可以直接返回一個list 而印出他的 list.Sum 時,可以有返回sum(list)的效果,也就是加總裡面所有的數字 ※ 編輯: papple23g (101.14.177.165), 12/10/2018 00:21:45
ThxThx: 抱歉我前面說錯 修改回傳instance的行為 但通常跟繼承有 12/10 00:26
ThxThx: 關 12/10 00:26
ThxThx: 你想做的叫built-in types subclassing 12/10 00:33
ThxThx: https://stackoverflow.com/q/14484749 12/10 00:33
原來如此,非常感謝解答<(_ _)> ※ 編輯: papple23g (101.14.177.165), 12/10/2018 00:46:36