Bir python 'type' nesnesini bir dizeye dönüştürme


152

Python 'yansıma' nesnesini python yansıtıcı yeteneklerini kullanarak bir dizeye dönüştürmek nasıl merak ediyorum.

Örneğin, bir nesnenin türünü yazdırmak istiyorum

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

1
Bir nesnenin "türü" ne olarak düşünüyorsunuz? Yayınladığınız şeyde işe yaramayan nedir?
Falmarri

Özür dileriz, baskı türü (someObject) gerçekten işe yarıyor :)
Rehno Lindeque

Yanıtlar:


223
print type(someObject).__name__

Bu size uygun değilse, bunu kullanın:

print some_instance.__class__.__name__

Misal:

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

Ayrıca, type()yeni stil sınıfları ile eski stil (yani kalıtım object) kullanılırken farklılıklar olduğu görülmektedir . Yeni stil sınıfı type(someObject).__name__için adı döndürür ve eski stil sınıfı için döndürür instance.


3
Bunu yaptığınızda print(type(someObject)), tam ad yazdırılacaktır (paket dahil)
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
>>> 

bir dizeye dönüştürmekle ne demek istiyorsun? kendi repr ve str _ yöntemlerinizi tanımlayabilirsiniz :

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

ya da ben bilmiyorum .. lütfen açıklamalar ekleyin;)


Btw. Sanırım orijinal cevabınız da yardımcı oldu str (type (someObject))
Rehno Lindeque

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

veya...

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


1

Kullanmak istiyorsanız str()ve özel bir str yöntemi. Bu aynı zamanda 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'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.