在将抽象 classes 与 `abc` 库一起使用时获取 python class 名称
Fetching python class name while using abstract classes with `abc` library
我想在使用带有 abc
库的抽象 classes 时提取 python class 名称。不幸的是,我收到了 class 名称 ABCMeta
.
import abc
class A(abc.ABC)
pass
class B(A)
pass
print(A.__class__.__name__) # output: 'ABCMeta'
print(B.__class__.__name__) # output: 'ABCMeta'
print(str(A)) # output: "<class '__main__.A'>"
print(str(B)) # output: "<class '__main__.B'>"
我希望收到如下输出
print(A.__class__.__name__) # output: 'A'
print(B.__class__.__name__) # output: 'B'
str(A)
和 str(B)
似乎打印了 class 名称,所以我假设可以从某处提取 class 名称。但是尽管如此,我对使用 str
解析和获取 class 名称不感兴趣。
仅使用 __name__
属性
print(A.__name__)
#A
A
本身就是一个 class,如果你使用 A.__class__
你会得到它的 metaclass 因此它是 metaclass 的名字。
回想一下,metaclass 是 class 的 类型,而 class 是其实例的类型。
如果我们有a = A()
,a
是A
类型,A
是abc.ABCMeta
类型。因此,您自然应该期望 A.__class__
和 B.__class__
都是 return abc.ABCMeta
,因为它们是它的实例!
你要的是A
和B
本身的名字,你可以分别用A.__name__
和B.__name__
得到。
我想在使用带有 abc
库的抽象 classes 时提取 python class 名称。不幸的是,我收到了 class 名称 ABCMeta
.
import abc
class A(abc.ABC)
pass
class B(A)
pass
print(A.__class__.__name__) # output: 'ABCMeta'
print(B.__class__.__name__) # output: 'ABCMeta'
print(str(A)) # output: "<class '__main__.A'>"
print(str(B)) # output: "<class '__main__.B'>"
我希望收到如下输出
print(A.__class__.__name__) # output: 'A'
print(B.__class__.__name__) # output: 'B'
str(A)
和 str(B)
似乎打印了 class 名称,所以我假设可以从某处提取 class 名称。但是尽管如此,我对使用 str
解析和获取 class 名称不感兴趣。
仅使用 __name__
属性
print(A.__name__)
#A
A
本身就是一个 class,如果你使用 A.__class__
你会得到它的 metaclass 因此它是 metaclass 的名字。
回想一下,metaclass 是 class 的 类型,而 class 是其实例的类型。
如果我们有a = A()
,a
是A
类型,A
是abc.ABCMeta
类型。因此,您自然应该期望 A.__class__
和 B.__class__
都是 return abc.ABCMeta
,因为它们是它的实例!
你要的是A
和B
本身的名字,你可以分别用A.__name__
和B.__name__
得到。