Pythonのリフレクション機能を使用して、python 'type'オブジェクトを文字列に変換する方法を知りたいのですが。
たとえば、オブジェクトのタイプを印刷したい
print "My type is " + type(someObject) # (which obviously doesn't work like this)
編集:ところで、みんな、ありがとう、私はコンソール出力の目的のために型のプレーンな印刷を探していただけで、空想はありませんでした。 Gabiのtype(someObject).__name__
は問題なく動作します:)
print type(someObject).__name__
それがあなたに合わないなら、これを使ってください:
print some_instance.__class__.__name__
例:
class A:
pass
print type(A())
# prints <type 'instance'>
print A().__class__.__name__
# prints A
また、新しいスタイルのクラスと古いスタイルのクラス(つまり、object
からの継承)を使用する場合、type()
との違いがあるようです。新しいスタイルのクラスの場合、type(someObject).__name__
は名前を返し、古いスタイルのクラスの場合、instance
を返します。
>>> 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
または私は知らない。説明を追加してください;)
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)
Str()を使用する
typeOfOneAsString=str(type(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'