如何在Python中打印类名

如何在Python中打印类名,python,class,Python,Class,我正在试图找到打印类名称的语法。鉴于以下情况: #!/usr/bin/python class a: whatever = 0 foo = a() bar = a() listOfClasses = [foo,bar] for l in listOfClasses: print l #I'm trying to find the syntax to print the name of the class (eg foo and bar) 从您的示例中,您正在查

我正在试图找到打印类名称的语法。鉴于以下情况:

#!/usr/bin/python

class a:
    whatever  = 0

foo = a()
bar = a()
listOfClasses = [foo,bar]

for l in listOfClasses:
    print l 
    #I'm trying to find the syntax to print the name of the class (eg foo and bar)

从您的示例中,您正在查找实例的名称(
foo
bar
)。简而言之,没有办法做到这一点,因为可能有多个命名变量指向同一个实例

如果您正在查找类的名称(即
a
),可以使用
l.\uuuuu class.\uuuu name.\uuuuu
。然而,这也不是完全防弹的:

In [10]: class A(object): pass
   ....: 

In [11]: A().__class__.__name__
Out[11]: 'A'

In [12]: Z = A

In [13]: Z().__class__.__name__
Out[13]: 'A'

从您的示例中,您正在查找实例的名称(
foo
bar
)。简而言之,没有办法做到这一点,因为可能有多个命名变量指向同一个实例

如果您正在查找类的名称(即
a
),可以使用
l.\uuuuu class.\uuuu name.\uuuuu
。然而,这也不是完全防弹的:

In [10]: class A(object): pass
   ....: 

In [11]: A().__class__.__name__
Out[11]: 'A'

In [12]: Z = A

In [13]: Z().__class__.__name__
Out[13]: 'A'

不可能获得这些信息,因为在Python中,对象本身没有名称(只有对对象的引用才有名称)。考虑:

foo = a()
bar = foo # bar is now another name for foo

lst = [foo, bar] # both elements refer to the *same* object
在这种情况下,假设的“name”函数会为
lst
的每个元素打印什么?要显示两个元素引用同一对象,请执行以下操作:

print [id(x) for x in lst]

将打印相同的
id
两次。

无法获取此信息,因为在Python中,对象本身没有名称(只有对对象的引用才有名称)。考虑:

foo = a()
bar = foo # bar is now another name for foo

lst = [foo, bar] # both elements refer to the *same* object
在这种情况下,假设的“name”函数会为
lst
的每个元素打印什么?要显示两个元素引用同一对象,请执行以下操作:

print [id(x) for x in lst]

将打印相同的
id
两次。

您可以使用此:
实例。\uuuuuu类\uuuuu名称\uuuuuuu

所以在你的例子中:
a=foo.\uuuuuuu类\uuuuuuuuu名\uuuuuuuuuuuu

b=bar.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


a
b
属于字符串类型。

您可以使用此:
实例。\uuuuuu类\uuuuuuuu名称\uuuuuuu

所以在你的例子中:
a=foo.\uuuuuuu类\uuuuuuuuu名\uuuuuuuuuuuu

b=bar.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


a
b
是字符串类型。

这不是类的名称,而是包含类实例的变量的名称。类名是“a”。最好是查看
locals()
字典,找到所需类的实例值。在这两种情况下,类的名称都是
a
。您试图找到最初分配的变量的名称,但这是不可能的。@vanza:这是一个很好的观点,但Python中的“变量”不包含实例。变量是绑定到其他地方存在的对象的名称。这不是类的名称,而是包含类实例的变量的名称。类名是“a”。最好是查看
locals()
字典,找到所需类的实例值。在这两种情况下,类的名称都是
a
。您试图找到最初分配的变量的名称,但这是不可能的。@vanza:这是一个很好的观点,但Python中的“变量”不包含实例。变量是绑定到其他地方存在的对象的名称。