国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python 自定義對象的打印方法

2020-02-16 00:37:59
字體:
來源:轉載
供稿:網友

在python中,如果不重寫自定義對象的__str__方法,打印出來的對象是一串類似于<__main__.Bean object at 0x1007da470>的字符串。這當然不是我們想要的結果。

于是:通過對__str__方法的重寫,就可以返回我們想要的數據的展示。

但是,一個新的問題出現了。以后,如果要修改這個類的屬性,那么要想正確的顯示對象的屬性。還得修改__str__方法。

有沒有辦法可以做到動態顯示所有的屬性呢?

當然是有的。

通過對對象的屬性的收集,就可以實現動態的打印全部的屬性。而且,更方便的是,我們可以將這種方法做成一個工具類。以后,自定義只需要繼承該類,就可以實現對象的屬性的完成打印了。ps:Python是支持多繼承的,所以,繼承該類實現格式化打印,并不影響原有邏輯。

看如下代碼是如何實現對類屬性的動態收集并打印的。

class AttrDisplay:  def gatherAttrs(self):    return ",".join("{}={}"            .format(k, getattr(self, k))            for k in self.__dict__.keys())    # attrs = []    # for k in self.__dict__.keys():    #   item = "{}={}".format(k, getattr(self, k))    #   attrs.append(item)    # return attrs    # for k in self.__dict__.keys():    #   attrs.append(str(k) + "=" + str(self.__dict__[k]))    # return ",".join(attrs) if len(attrs) else 'no attr'  def __str__(self):    return "[{}:{}]".format(self.__class__.__name__, self.gatherAttrs())

OK,似乎所有的工作都已經完成了,來簡單測試一下吧:

class Bean(AttrDisplay):  def __init__(self, id=1024, name='Jack Chen', job='Actor'):    self.id = id    self.name = name    self.job = job  def doSomething(self):    return self.name + " doing something now ..."if __name__ == '__main__':  bob = Bean()  print(bob)# [Bean:id=1024,name=Jack Chen,job=Actor]

嗯,測試結果似乎和我們預期的一致。所以,這樣就實現對自定義對象的打印。

以上這篇python 自定義對象的打印方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金昌市| 喀喇| 滕州市| 丰都县| 华蓥市| 临清市| 陵川县| 尼木县| 枞阳县| 边坝县| 惠水县| 邮箱| 兴城市| 宜宾市| 县级市| 全椒县| 林州市| 正定县| 纳雍县| 东阳市| 武义县| 山西省| 丹棱县| 彰化市| 保山市| 五常市| 阆中市| 昭通市| 陵水| 阿城市| 托克逊县| 东安县| 临武县| 垦利县| 车致| 柞水县| 金华市| 宽城| 大同市| 灵寿县| 杭锦旗|