Tôi đang tự hỏi làm thế nào để chuyển đổi một đối tượng 'loại' python thành một chuỗi bằng khả năng phản chiếu của python.
Ví dụ: tôi muốn in loại đối tượng
print "My type is " + type(someObject) # (which obviously doesn't work like this)
Tôi đang tự hỏi làm thế nào để chuyển đổi một đối tượng 'loại' python thành một chuỗi bằng khả năng phản chiếu của python.
Ví dụ: tôi muốn in loại đối tượng
print "My type is " + type(someObject) # (which obviously doesn't work like this)
Câu trả lời:
print type(someObject).__name__
Nếu điều đó không phù hợp với bạn, hãy sử dụng điều này:
print some_instance.__class__.__name__
Thí dụ:
class A:
pass
print type(A())
# prints <type 'instance'>
print A().__class__.__name__
# prints A
Ngoài ra, dường như có sự khác biệt type()
khi sử dụng các lớp kiểu mới so với kiểu cũ (nghĩa là kế thừa từ object
). Đối với một lớp kiểu mới, type(someObject).__name__
trả về tên và đối với các lớp kiểu cũ, nó trả về instance
.
print(type(someObject))
sẽ in tên đầy đủ (nghĩa là bao gồm cả gói)
>>> class A(object): pass
>>> e = A()
>>> e
<__main__.A object at 0xb6d464ec>
>>> print type(e)
<class '__main__.A'>
>>> print type(e).__name__
A
>>>
bạn có ý nghĩa gì khi chuyển đổi thành một chuỗi? bạn có thể định nghĩa các phương thức repr và str _ của riêng bạn :
>>> 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
hoặc tôi không biết .. xin vui lòng thêm giải thích;)
print("My type is %s" % type(someObject)) # the type in python
hoặc là...
print("My type is %s" % type(someObject).__name__) # the object's type (the class you defined)
Trong trường hợp bạn muốn sử dụng str()
và một phương thức str tùy chỉnh . Điều này cũng hoạt động cho 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'