Перетворіть об’єкт python 'type' у рядок


152

Мені цікаво, як перетворити об’єкт 'type' python в рядок, використовуючи відображаючі можливості python.

Наприклад, я хотів би надрукувати тип об’єкта

print "My type is " + type(someObject) # (which obviously doesn't work like this)

1
Яким ви вважаєте "тип" об'єкта? А що не працює над тим, що ви розмістили?
Фальмарі

Вибачення, тип друку (someObject) насправді працює :)
Rehno Lindeque

Відповіді:


223
print type(someObject).__name__

Якщо це вам не підходить, використовуйте це:

print some_instance.__class__.__name__

Приклад:

class A:
    pass
print type(A())
# prints <type 'instance'>
print A().__class__.__name__
# prints A

Крім того, схоже, є відмінності type()при використанні класів нового стилю проти старого стилю (тобто успадкування від object). Для класу нового стилю type(someObject).__name__повертає ім'я, а для класів старого - повертає instance.


3
Doing print(type(someObject))надрукує повне ім’я (тобто включно з пакетом)
MageWind

7
>>> class A(object): pass

>>> e = A()
>>> e
<__main__.A object at 0xb6d464ec>
>>> print type(e)
<class '__main__.A'>
>>> print type(e).__name__
A
>>> 

що ви маєте на увазі під перетворенням у рядок? ви можете визначити свої власні методи repr та str _:

>>> class A(object):
    def __repr__(self):
        return 'hei, i am A or B or whatever'

>>> e = A()
>>> e
hei, i am A or B or whatever
>>> str(e)
hei, i am A or B or whatever

або я не знаю .. просимо додати пояснення;)


Btw. Я думаю, що у вашій оригінальній відповіді була str (type (someObject)), яка також була корисною
Rehno Lindeque

4
print("My type is %s" % type(someObject)) # the type in python

або ...

print("My type is %s" % type(someObject).__name__) # the object's type (the class you defined)


1

У випадку, якщо ви хочете використовувати str()і власний метод str . Це також працює для repr.

class TypeProxy:
    def __init__(self, _type):
        self._type = _type

    def __call__(self, *args, **kwargs):
        return self._type(*args, **kwargs)

    def __str__(self):
        return self._type.__name__

    def __repr__(self):
        return "TypeProxy(%s)" % (repr(self._type),)

>>> str(TypeProxy(str))
'str'
>>> str(TypeProxy(type("")))
'str'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.