python中的__repr__ 方法


先來看一段代碼:

class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age
person = Person('呂星辰',20)
print(person) # 內存中的一個對象 <__main__.Person object at 0x0042A6A0>

輸出實例化的Person類,返回的是一個在內存中的對象;

當輸出person實例對象時,實際上輸出的是person對象上 __repr__ 方法的返回值

也就是說下邊兩個輸出的效果一樣  (內存地址相同)  :

print(person) # <__main__.Person object at 0x0025A6A0>
print(person.__repr__) # <method-wrapper '__repr__' of Person object at 0x0025A6A0>

原理: 即__repr__ 方法默認返回值的實現

class Person():
    def __init__(self,name,age): self.name = name self.age = age def __repr__(self): return '<{0}.{1} object at {2}>'.format(self.__module__,type(self).__name__,hex(id(self))) person = Person('呂星辰',20) print(person) # <__main__.Person object at 0x5ba6a0>

 

重寫 __repr__ 方法

是Python類中的一個特殊方法,由object對象提供,由於所有類都是object類的子類,所以都會繼承該方法!!!

它是一個 ”自我描述“ 的方法,此方法通常實現這樣的功能: 當直接打印類的實例化對象時,系統將會輸出對象的自我描述信息,用來告訴外界對象具有的狀態信息。

但是由於object提供的這個 __repr__ 方法總是返回一個對象, (  類名 + obejct  at + 內存地址  ),這個值並不能真正實現自我描述的功能!!!

因此,如果你想在自定義類中實現  “自我描述” 的功能,那么必須重寫 __repr__ 方法:

class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __repr__(self):
        return 'Person類,包含name='+self.name+'和age='+str(self.age)+'兩個實例屬性'
person = Person('呂星辰',20)
 
print(person) # Person類,包含name=呂星辰和age=20兩個實例屬性

上邊代碼,重寫了__repr__,打印person實例時,就可以返回類的 ”自我描述“ 的信息。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM