如何将类类型名称更改为classobj以外的其他名称?
class bob():
pass
foo = bob
print "%s" % type(foo).__name__
让我'classobj'。
答案 0 :(得分:13)
在您的示例中,您已将foo
定义为bob
的类定义的引用,而不是bob的实例。 (旧式)类的类型确实是classobj
。
另一方面,如果您实例化bob
,结果将会有所不同:
# example using new-style classes, which are recommended over old-style
class bob(object):
pass
foo = bob()
print type(foo).__name__
'bob'
如果您只想查看bob
类型的名称而不进行实例化,请使用:
print bob.__name__
'bob'
这是有效的,因为bob
已经是类类型,因此可以查询__name__
属性。
答案 1 :(得分:11)
class DifferentTypeName(type): pass
class bob:
__metaclass__ = DifferentTypeName
foo = bob
print "%s" % type(foo).__name__
根据您的需要发出DifferentTypeName
。这似乎不太可能实际上是你想要的(或者需要的),但是,嘿,是完全按照你强烈要求提出的方式:改变一个类的type
的名字。稍后将type
的合适重命名衍生分配给foo.__class__
或bob.__class__
也可以,因此您可以将其封装到一个非常奇特的函数中:
def changeClassTypeName(theclass, thename):
theclass.__class__ = type(thename, (type,), {})
changeClassTypeName(bob, 'whatEver')
foo = bob
print "%s" % type(foo).__name__
这会发出whatEver
。