Преобразовать объект типа Python в строку


152

Мне интересно, как преобразовать объект типа 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)), который также был полезен
Рено Линдек

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 . Это также работает для репр.

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.