แปลงวัตถุ 'พิมพ์' หลามเป็นสตริง


152

ฉันสงสัยว่าจะแปลงวัตถุชนิด 'หลาม' เป็นสตริงโดยใช้ความสามารถในการสะท้อนของงูใหญ่

ตัวอย่างเช่นฉันต้องการพิมพ์ประเภทของวัตถุ

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

1
คุณคิดว่า "ประเภท" ของวัตถุเป็นอย่างไร และสิ่งใดไม่ทำงานเกี่ยวกับสิ่งที่คุณโพสต์
Falmarri

ขอโทษชนิด (someObject) พิมพ์ไม่จริงทำงาน :)
Rehno Lindeque

คำตอบ:


223
print type(someObject).__name__

หากไม่เหมาะกับคุณให้ใช้สิ่งนี้:

print some_instance.__class__.__name__

ตัวอย่าง:

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

นอกจากนี้ดูเหมือนว่าจะมีความแตกต่างtype()เมื่อใช้คลาสสไตล์ใหม่กับแบบเก่า (นั่นคือการสืบทอดจากobject) สำหรับการเรียนแบบใหม่ส่งกลับชื่อและสำหรับการเรียนแบบเก่ามันกลับtype(someObject).__name__instance


3
การทำprint(type(someObject))จะพิมพ์ชื่อเต็ม (เช่นรวมถึงแพคเกจ)
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
>>> 

คุณหมายถึงอะไรโดยการแปลงเป็นสตริง? คุณสามารถกำหนดวิธีการตอบโต้และ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

หรือฉันไม่รู้ .. กรุณาเพิ่มการอธิบาย;)


Btw ฉันคิดว่าคำตอบดั้งเดิมของคุณมี str (type (someObject)) ซึ่งก็มีประโยชน์เช่นกัน
Rehno Lindeque



1

ในกรณีที่คุณต้องการใช้str()และวิธีการstrแบบกำหนดเอง วิธีนี้ใช้ได้กับการพิมพ์อีกครั้ง

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'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.