Python: изменить имя типа класса - PullRequest
0 голосов
/ 05 декабря 2009

Как бы вы изменили имя типа класса на что-то отличное от classobj?

class bob():
    pass

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

, что дает мне «classobj».

Ответы [ 2 ]

13 голосов
/ 05 декабря 2009

В вашем примере вы определили 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__, к которому вы можете обращаться.

11 голосов
/ 05 декабря 2009
class DifferentTypeName(type): pass

class bob:
  __metaclass__ = DifferentTypeName

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

испускает DifferentTypeName, как вам требуется. Кажется маловероятным, что это действительно то, что вы хотите (или нуждаетесь), но, эй, это - это способ сделать именно то, что вы так явно просите для: изменить * 1007 класса * имя Назначение подходящего переименованного производного от 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...