日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python自定義類中內(nèi)部函數(shù):__repr__()和__string__

系統(tǒng) 1784 0

我們在定義Python類時,經(jīng)常會看到比較好的代碼中,都有__repr__和__string__,兩個內(nèi)部函數(shù)的定義。但是我一直很少關(guān)注它們的區(qū)別和具體應(yīng)用場景。稍微做個小結(jié)。

1.__foo()__在python中表示__foo__是一個私有private 函數(shù),在CookBook pp254中,解釋為,該函數(shù)不會被子類的相同名稱的函數(shù)重載。一般地說,類中以“下劃線”開頭定義的變量或者函數(shù)都是私有變量或者內(nèi)部函數(shù),區(qū)別是:

? 1.1 單下劃線開始的變量或者函數(shù)表示非公有名稱,會被子類初始化時處理,也就是說暴露給繼承的子類。

? 1.2 雙下劃線開頭的變量或函數(shù)會對子類隱藏

2.__repr__(),可以被用于obj=eval(repr(obj)),也就說是可以用該函數(shù)返回值的字符串文本重新創(chuàng)建該類的實例;而__str__(),是將實例轉(zhuǎn)換為一個字符串。

?

            
              #coding:utf-8
class Test():
    def __init__(self,x,y):
        self.x=x
        self.y=y

    def __repr__(self):
        return 'Test({0.x!r},{0.y!r})'.format(self)   

    def __str__(self):   #convert the instance to string,then print out
        return '({0.x!s},{0.y!s})'.format(self)


#output:
In [4]: from my_repr import Test
In [5]: test=Test
In [6]: test
Out[6]: my_repr.Test
In [7]: test=Test(3,4)  #實例化對象
In [8]: test
Out[8]: Test(3,4)   #返回的是__repr__()中的字符串
In [9]: print(test)  #返回的是__str__()的值
(3,4)
In [10]: tt=eval(repr(test))  #tt是Test類的另一個實例
In [11]: tt
Out[11]: Test(3,4)
In [12]: id(tt)==id(test)
Out[12]: False
In [13]: id(tt)
Out[13]: 2302160271176
In [14]: id(test)
Out[14]: 2302160237176
In [15]: type(test)==type(tt)
Out[15]: True

            
          

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 巨野县| 安乡县| 浪卡子县| 东平县| 安义县| 鲁甸县| 三河市| 永和县| 共和县| 阿合奇县| 临漳县| 广宗县| 克拉玛依市| 景宁| 鱼台县| 洪湖市| 新绛县| 罗定市| 铁力市| 台湾省| 湖北省| 武安市| 沁阳市| 酉阳| 谢通门县| 老河口市| 浠水县| 桃江县| 宁津县| 清新县| 清镇市| 新竹县| 柞水县| 延安市| 临夏县| 阳谷县| 曲沃县| 揭东县| 贡觉县| 惠州市| 萨迦县|