Chuyển đổi một đối tượng 'kiểu' python thành một chuỗi


152

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)

1
Bạn coi "loại" của một đối tượng là gì? Và những gì không làm việc về những gì bạn đã đăng?
Falmarri

Lời xin lỗi, kiểu in (someObject) thực sự hoạt động :)
Rehno Lindeque

Câu trả lời:


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


3
Làm print(type(someObject))sẽ in tên đầy đủ (nghĩa là bao gồm cả gói)
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
>>> 

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 reprstr _ 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;)


Btw. Tôi nghĩ rằng câu trả lời ban đầu của bạn có str (loại (someObject)) cũng hữu ích
Rehno Lindeque

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


1

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'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.