如何获取Python对象类的变量名

3

我希望知道这是否可能/如何实现。

我有一个Python对象类:

class myClass(object):
    def __init__(self):
        ...do something

然后我创建了该对象的一个实例:
myObjectClass = myClass()

myClass内部,是否可以将变量(myObjectClass)的“名称”作为字符串获取?

谢谢, Adam


1
为什么你需要这样做? - Blender
3
a_tuple = (myClass(), 1)的输出应该是一个包含一个myClass实例和数字1的元组。some_instances = [myClass(), myClass(), myClass()]的输出将是一个包含3个myClass实例的列表。由于您提供的信息不够充分,因此无法为您提供更详细的答案。另外,您似乎已经遇到了XY问题。 - Bakuriu
请查看我的原始帖子:stackoverflow.com/a/59364138/5088165 - Panwen Wang
3个回答

5
不可能以任何合理的方式实现,而且多个变量可能指向同一个对象。在局部变量方面根本不可能。无论你试图解决什么问题,这都不是正确的方法。
此外,搞清楚“对象”或“实例”与“类”的区别。

2
除了一些hackish方法以外,这绝对是不可能的。
为什么不直接在init中添加一个"name"参数,像这样:
def __init__(self, name):
    self.name = name

myObjectClass = myClass("myObjectClass")

这是我实际操作的方法...


1
那又能给你带来什么好处呢?我并不是说这样做是错误的 - 相反,这是正确的方式去做一件可能是错误的事情。 - Marcin
就像你所说的,这是做错事情的正确方式。这非常“无用”和“愚蠢”,我不确定他这样做的目的是什么。 - user1301404
self.nameself 并没有太大的区别,后者不是名称而是指针,足以进行寻址。那么名称还有什么其他用途呢? - latheiere

1
你可以这样做:

obj = MyClass()

the_globals = globals()
for o in the_globals:
    if the_globals[o].__class__.__name__ == 'MyClass':
        print 'yay', o

但你真的不想这样做。

如果 obj 不是全局的,那它是什么? - Marcin
@Marcin:那么代码需要进行适应。这只是一个假设,展示了可以做什么。 - Simeon Visser
那样是行不通的。对于非全局名称,没有解决方案。 - Marcin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接