【问题标题】:Get the name of a variable获取变量名
【发布时间】:2012-11-13 07:23:24
【问题描述】:

我想知道是否可以获取调用函数的变量的名称,以及如何获取。 例如:

myVar = something
myVar2 = something
myVar.function()
myVar2.function()

并且代码应该返回

myVar calls function()
myVar2 calls function()

谢谢。

【问题讨论】:

标签: python variables


【解决方案1】:

似乎something 已经是一个自定义类的对象(如果这是一个内置类,您可以对其进行子类化)。只需添加一个实例属性name,创建时赋值,以后使用:

In [1]: class MyClass:
   ...:     def __init__(self, name):
   ...:         self.name = name
   ...:     def function(self):
   ...:         print 'function called on', self.name
   ...: 

In [2]: myVar = MyClass('Joe')

In [3]: myVar2 = MyClass('Ben')

In [4]: myVar.function()
function called on Joe

In [5]: myVar2.function()
function called on Ben

附:我知道这不是您要问的,但我认为 this 比实际尝试使用变量名更好。上面评论中提到的问题有一个很好的answer解释原因。

【讨论】:

    【解决方案2】:

    你可以这样做:

    def myfuncname():
        pass
    myvar=myfuncname
    print globals()['myvar'].__name__
    

    它将打印分配给变量的函数的名称。

    【讨论】:

    • 什么?!? globals()['myvar'] 是,除了局部变量的阴影(这里不是这种情况),等于只引用 myvar。其次,函数的__name__ 是在其定义期间使用的名称(如果以后没有手动更改),因此即使变量myfuncname 不再存在或指不同的东西。第三,这不是问题所要求的。 -1
    【解决方案3】:

    可能没有名字:

    def another:
        return something 
    
    another().function()
    

    Lev 的答案有一个很好的属性,它不依赖于任何内部 python 实现细节。列夫的技术是我经常使用的技术。

    【讨论】:

      【解决方案4】:

      您可以进行一些堆栈操作来实现这一点,但我当然不建议这样做。希望你永远不要在实际代码中使用它:

      >>> class C:
              def function(self):
                  text = inspect.stack()[1][4][0].strip().split('.')
                  return '{0} calls {1}'.format(*text)
      
      >>> myVar = C()
      >>> myVar.function()
      'myVar calls function()'
      

      【讨论】:

        猜你喜欢
        • 2015-01-27
        • 2021-04-10
        • 2016-03-30
        • 2014-06-20
        • 1970-01-01
        • 1970-01-01
        • 2018-12-20
        • 1970-01-01
        • 2014-02-08
        相关资源
        最近更新 更多