Python 的對象天生擁有一些神奇的方法,它們總被雙下劃線所包圍,它們是面向對象的 Python 的一切。它們是可以給你的類增加魔力的特殊方法,如果你的對象實現(重載)了某一個魔法方法,那麼這個方法就會在特殊的情況下自動被 Python 所調用。
定義對象被 repr() 函數或互交式解釋器調用時的行為,該方法一般面向程序設計者。
self 表示對象本身。
必須是一個字符串,否則拋出異常。
class MyText:
def __repr__(self) -> str:
return 'My is repr'
sample = MyText()
# My is repr
print(sample)
# My is repr
print(repr(sample))
結果:
My is repr
My is repr
__repr__()
是 Python 類中的一個特殊方法,由 object 對象提供,由於所有類都是 object 類的子類,所以所有類都會繼承該方法。
該方法主要實現 “自我描述” 功能——當直接打印類的實例化對象時,系統將會自動調用該方法,輸出對象的自我描述信息,用來告訴外界對象具有的狀態信息。
但是,object 類提供的 __repr__()
方法總是返回一個對象(類名 + obejct at + 內存地址),這個值並不能真正實現自我描述的功能!如下:
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
person = Person('zk', 20)
print(person)
print(person.__repr__())
執行結果:
<__main__.Person object at 0x0000020F6A467B20>
<__main__.Person object at 0x0000020F6A467B20>
因此,如果你想在自定義類中實現 “自我描述” 的功能,那麼必須重寫 repr 方法:
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return 'Person類,有name和age兩個屬性'
person = Person('zk', 20)
print(person)
print(person.__repr__())
執行結果:
Person類,有name和age兩個屬性
Person類,有name和age兩個屬性