Python:更改类类型名称

时间:2009-12-04 23:14:23

标签: python

如何将类类型名称更改为classobj以外的其他名称?

class bob():
    pass

foo = bob
print "%s" % type(foo).__name__

让我'classobj'。

2 个答案:

答案 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