你能从Python类获得实例变量名吗?

这个问题在这里已经有了答案:

  • 在Python 8中获取实例的类名答案

  • 您可以查看实例的globals字典并查找将其自身作为值的项目。

    class Foo(object):
        def bar(self):
            return [k for k,v in globals().items() if v is self]
        def bah(self):
            d = {v:k for k,v in globals().items()}
            return d[self]
    
    f = Foo()
    g = Foo()
    
    print f.bar(), g.bar()
    print f.bah(), g.bah()
    
    >>> 
    ['f'] ['g']
    f g
    >>> 
    

    如果你不介意这个程序正在退出,这是一个非常愚蠢的做法:将这一行添加到foo()中:

    print undefined_variable

    当你到达那里时,你会得到如下的堆栈跟踪:

    Traceback (most recent call last): File "test.py", line 15, in <module> m.foo("Test") File "test.py", line 11, in foo print undefined_variable NameError: global name 'undefined_variable' is not defined

    ...它告诉你,调用它的变量的名称是'm':)

    (你可以使用traceback模块来做这样的事情,而不会终止程序,我已经尝试了几种方法,但还没有设法在输出中包含m.foo()行)。


    是。 要获得班级的所有成员,可以使用内置关键字“dir”。 它将列出班级中的所有方法和变量。 如果您使用适当的命名转换,您应该能够确定哪些名称是变量,哪些是方法。 Dir返回一个字符串列表。

    class Man():
        def __init__(self):
            self.name = "Bob"
            self.color = "White"
    m = Man()
        print dir(m)
    

    这将打印出来:

    [' doc ',' init ',' module ','color','name']]

    颜色和名称不是这个类的实例变量名称吗?

    链接地址: http://www.djcxy.com/p/40939.html

    上一篇: Can you get the instance variable name from a Python class?

    下一篇: Get just a class name without module, etc