Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在实例列表上调用特定方法(使用map)?_Python_Dictionary_Map_Method Call - Fatal编程技术网

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生成代码。我以前不知道这个报告。美好的