作者papple23g (逆道者)
看板Python
标题[问题] class.__new__ 使用疑问
时间Sun Dec 9 23:52:33 2018
今天在网路上查到
想要让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://webptt.com/cn.aspx?n=bbs/Python/M.1544370755.A.BA4.html
1F:推 ThxThx: 把__new__和__init__想成是初始化物件的不同阶段 12/10 00:07
2F:→ ThxThx: 通常是因为继承然後又想修改derived class的行为 12/10 00:07
3F:→ ThxThx: 大部分的情况用到__new__是anti pattern 12/10 00:07
4F:→ ThxThx: 至於改写,你没有说明你期待的功能是什麽? 12/10 00:10
感谢回覆
我对专业术语还比较陌生,可能用词上会有错误
以上面的范例来说,我希望可以重新定义一个类别
这个类别可以直接返回一个list
而印出他的 list.Sum 时,可以有返回sum(list)的效果,也就是加总里面所有的数字
※ 编辑: papple23g (101.14.177.165), 12/10/2018 00:21:45
5F:推 ThxThx: 抱歉我前面说错 修改回传instance的行为 但通常跟继承有 12/10 00:26
6F:→ ThxThx: 关 12/10 00:26
7F:→ ThxThx: 你想做的叫built-in types subclassing 12/10 00:33
原来如此,非常感谢解答<(_ _)>
※ 编辑: papple23g (101.14.177.165), 12/10/2018 00:46:36