Python 如何在实例列表上调用特定方法(使用map)?
我有以下课程:Python 如何在实例列表上调用特定方法(使用map)?,python,dictionary,map,method-call,Python,Dictionary,Map,Method Call,我有以下课程: class Enum(RootFragment): def __init__(self, column, packageName, name, modifiers=["public"], enumValues=[]): RootFragment.__init__(self, packageName, name, modifiers, "enum") self.column = column self.enumValues
class Enum(RootFragment):
def __init__(self, column, packageName, name, modifiers=["public"], enumValues=[]):
RootFragment.__init__(self, packageName, name, modifiers, "enum")
self.column = column
self.enumValues = []
map(self.addEnumValue, enumValues)
... more methods
现在,我创建了许多放入dict中的枚举实例。这是在打印冲突枚举上打印的内容:
但这给了我一个错误,说:
TypeError: unbound method getName() must be called with Enum instance as first argument (got tuple instance instead)
嗯?在这里如何调用getName方法?有可能吗?如果您为枚举类提供了uu repr_u_u方法,那么它将打印您想要的任何内容,而不是如果您为枚举类提供了u repr_u_u方法,那么它将打印您想要的任何内容,而不是不要使用map。请改用生成器表达式:
print ", ".join(i.getName() for i in collidingEnums.values())
或者,您可以简单地为您的Enum类定义自己的_repr______________________________________
class Enum(RootFrament):
# ...
def __repr__(self):
return self.getName()
不要使用地图。请改用生成器表达式:
print ", ".join(i.getName() for i in collidingEnums.values())
或者,您可以简单地为您的Enum类定义自己的_repr______________________________________
class Enum(RootFrament):
# ...
def __repr__(self):
return self.getName()
您正在对元组调用该方法。如果使用CollindingEnums.itervalues,则将有一个枚举对象生成器。您正在对元组调用该方法。如果您使用CollindingEnums.itervalues,您将有一个Enum对象生成器。我认为比使用getName更好的方法是在Enum类上使用repr、str或unicode函数 可能是这样的
class Enum():
def getName(self):
return self.name
def __repr__(self):
return self.getName()
我认为比使用getName更好的方法是在Enum类上使用repr、str或unicode函数 可能是这样的
class Enum():
def getName(self):
return self.name
def __repr__(self):
return self.getName()
因为在字典中,items返回pairs键,所以没有方法调用该对上的Enum.getName。只在值上调用它,例如
print ", ".join(map(Enum.getName, collidingEnums.values())
如果您希望同时显示钥匙,请在两个零件上使用例如lambda
print ", ".join(map(lambda x: x[0] +":"+ x[1].getName(), collidingEnums.items()))
因为在字典中,items返回pairs键,所以没有方法调用该对上的Enum.getName。只在值上调用它,例如
print ", ".join(map(Enum.getName, collidingEnums.values())
如果您希望同时显示钥匙,请在两个零件上使用例如lambda
print ", ".join(map(lambda x: x[0] +":"+ x[1].getName(), collidingEnums.items()))
您可以使用attrgetter对map执行此操作
但是,由于要将映射的结果传递到join中,因此在这种情况下,最好按照琥珀色的建议使用带有join的生成器表达式
但是,由于要将映射的结果传递到join中,因此在这种情况下,最好按照Amber的建议使用带有join的生成器表达式对不起,我的意思是,使用getattrobject、\uuuu name\uu在这种特殊情况下,您的问题是调用dict.items,它返回键、值元组。如果您正在调用dict.values,那么这个特定的示例将起作用。但是,要使其适用于不具有相同类型的值,请使用Amber建议中的列表理解。对不起,我的意思是,使用getattrobject、\uuuu name\uu在这种情况下,您的问题是调用dict.items,它返回键、值元组。如果您正在调用dict.values,那么这个特定的示例将起作用。但是,要使其适用于不具有相同类型的值,请在Amber的suggestion.i.getName for i中使用列表理解,在CollingEnums.items中使用AttributeError:“tuple”对象没有属性“getName”。。。将其更改为i.getName作为键,i在CollindingEnums.items中似乎起作用了,是的,应该是。值无论出于什么原因,_urepr_u_u_u_u_u_u_u_u_u_u________________。以前从没见过。用Python实现这一点的方法有很多,这是一种神奇的语言。感谢大家。出于好奇,在这种情况下map有什么不好的地方?@WolframH生成器表达式/列表理解通常比map更受欢迎-但在这种情况下,特别是,因为我们处理的是绑定方法而不是普通函数,所以它更有意义。例如,生成器表达式版本即使不是所有项都是Enum也可以工作,只要它们在CollindingEnum.items中有一个getName方法.i.getName For i。items提供AttributeError:“tuple”对象没有属性“getName”。。。将其更改为i.getName作为键,i在CollindingEnums.items中似乎起作用了,是的,应该是。值无论出于什么原因,_urepr_u_u_u_u_u_u_u_u_u_u________________。以前从没见过。用Python实现这一点的方法有很多,这是一种神奇的语言。感谢大家。出于好奇,在这种情况下map有什么不好的地方?@WolframH生成器表达式/列表理解通常比map更受欢迎-但在这种情况下,特别是,因为我们处理的是绑定方法而不是普通函数,所以它更有意义。例如,即使不是所有的项都是Enum,生成器表达式版本也可以工作,只要它们有一个getName方法。我以前不知道这个报告。很好。我需要用str生成代码。我以前不知道这个报告。美好的