首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取对象的名称?

如何获取对象的名称?
EN

Stack Overflow用户
提问于 2009-10-08 14:54:22
回答 17查看 155.8K关注 0票数 45

有没有办法在Python中获得对象的名称?例如:

代码语言:javascript
复制
my_list = [x, y, z] # x, y, z have been previously defined

for bla in my_list:
    print "handling object ", name(bla) # <--- what would go instead of `name`?
    # do something to bla

编辑:一些上下文:

我实际要做的是创建一个可以通过命令行指定的函数列表。

我有:

代码语言:javascript
复制
def fun1:
    pass
def fun2
    pass
def fun3:
    pass

fun_dict = {'fun1': fun1,
            'fun2': fun2,
            'fun3': fun3}

我从命令行中获取函数的名称,并希望调用相关的函数:

代码语言:javascript
复制
func_name = parse_commandline()

fun_dict[func_name]()

我想要函数名的原因是因为我想创建fun_dict而不编写两次函数名,因为这似乎是一个创建bug的好方法。我想做的是:

代码语言:javascript
复制
fun_list = [fun1, fun2, fun3] # and I'll add more as the need arises

fun_dict = {}
[fun_dict[name(t) = t for t in fun_list] # <-- this is where I need the name function

这样,我只需要写一次函数名。

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2009-10-08 14:58:41

对象在Python中不一定有名称,因此您无法获取名称。

在对象有名称的情况下,对象有__name__属性并不少见,但这不是标准Python的一部分,而且大多数内置类型都没有。

当您创建一个变量时,就像上面的x, y, z一样,这些名称只是充当对象的“指针”或“引用”。对象本身不知道您正在为它使用什么名称,并且您不能轻松地(如果有的话)获得对该对象的所有引用的名称。

更新:然而,函数确实有一个__name__ (除非它们是lambdas),所以在这种情况下,你可以这样做:

代码语言:javascript
复制
dict([(t.__name__, t) for t in fun_list])
票数 51
EN

Stack Overflow用户

发布于 2009-10-08 15:01:40

这是不可能的,因为可能有多个变量具有相同的值,或者一个值可能没有变量,或者一个值可能只是偶然地与变量具有相同的值。

如果你真的想这样做,你可以使用

代码语言:javascript
复制
def variable_for_value(value):
    for n,v in globals().items():
        if v == value:
            return n
    return None

但是,如果您首先遍历名称会更好:

代码语言:javascript
复制
my_list = ["x", "y", "z"] # x, y, z have been previously defined

for name in my_list:
    print "handling variable ", name
    bla = globals()[name]
    # do something to bla
票数 14
EN

Stack Overflow用户

发布于 2013-04-22 11:53:40

这一行代码适用于所有类型的对象,只要它们在globals()字典中,它们应该是:

代码语言:javascript
复制
def name_of_global_obj(xx):
    return [objname for objname, oid in globals().items()
            if id(oid)==id(xx)][0]

或者,等效地:

代码语言:javascript
复制
def name_of_global_obj(xx):
    for objname, oid in globals().items():
        if oid is xx:
            return objname
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1538342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档