繁体   English   中英

为什么在 python 中定义类时不能在 __new__ 中使用 list(filter(boolean,python_list)) ?

[英]Why cannot use list(filter(boolean,python_list)) inside __new__ while defining a class in python?

我意识到在定义类时__new____new__应用list(filter(_,_)) 但是,可以单独使用过滤器或列表。

控制台抛出此错误:

TypeError: 'list' object is not callable

这不起作用:

class test():    
   def __init__(self):     
       self.mean = [1,2,3,4]
bool_list=[True,False,True,True]     

class tracegrad_set():     
   def __new__(cls,obj,bool_list):     
       list(filter(bool_list,obj.mean))     
       obj.mean= obj.mean[:2]     
       return obj       
a=test()     
b=tracegrad_set(a,bool_list)

同时这

class test():    
   def __init__(self):     
       self.mean = [1,2,3,4]
bool_list=[True,False,True,True]     

class tracegrad_set():     
   def __new__(cls,obj,bool_list):     
       filter(bool_list,obj.mean)   
       obj.mean= obj.mean[:2]     
       return obj       
a=test()     
b=tracegrad_set(a,bool_list)

或这个

class test():    
   def __init__(self):     
       self.mean = [1,2,3,4]
bool_list=[True,False,True,True]     

class tracegrad_set():     
   def __new__(cls,obj,bool_list):     
       list(bool_list,obj.mean)   
       obj.mean= obj.mean[:2]     
       return obj       
a=test()     
b=tracegrad_set(a,bool_list)

filter期望作为第一个参数是可调用的或 None (仅过滤掉评估为 false-ish 的元素); 您在那里提供了一个布尔值list ,因此当您尝试访问过滤结果时,会TypeError 过滤器试图调用类似bool_list(obj.mean[0])

正如我只能假设,您想保留 bool 列表中索引为True的列表元素,使用列表理解更容易实现这一点,例如:

my_new_list = [value for keep, value in zip(bool_list, obj.mean) if keep]

或者,如果您坚持使用map / filter ,您可以使用以下内容:

from operator import itemgetter
...
my_new_list = map(itemgetter(1), filter(itemgetter(0), zip(bool_list, obj.mean))
# or use lambda: t: t[<index>]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM