Konversi objek 'tipe' python ke string


152

Saya bertanya-tanya bagaimana cara mengubah objek 'tipe' python menjadi string menggunakan kemampuan reflektif python.

Misalnya, saya ingin mencetak jenis objek

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

1
Apa yang Anda anggap "tipe" dari suatu objek? Dan apa yang tidak berhasil tentang apa yang Anda posting?
Falmarri

Permintaan maaf, tipe cetak (someObject) benar-benar berfungsi :)
Rehno Lindeque

Jawaban:


223
print type(someObject).__name__

Jika itu tidak cocok untuk Anda, gunakan ini:

print some_instance.__class__.__name__

Contoh:

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

Juga, tampaknya ada perbedaan dengan type()ketika menggunakan kelas gaya baru vs gaya lama (yaitu, warisan dari object). Untuk kelas gaya baru, type(someObject).__name__mengembalikan nama, dan untuk kelas gaya lama mengembalikannya instance.


3
Doing print(type(someObject))akan mencetak nama lengkap (mis. Termasuk paket)
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
>>> 

apa maksudmu dengan mengubahnya menjadi string? Anda dapat mendefinisikan metode repr dan str _ Anda sendiri :

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

atau saya tidak tahu..silakan tambahkan penjelasan;)


Btw. Saya pikir jawaban awal Anda memiliki str (type (someObject)) yang juga membantu
Rehno Lindeque

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

atau...

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


1

Jika Anda ingin menggunakan str()dan metode str kustom . Ini juga berfungsi untuk 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'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.