python-面向對象-20-重寫__str__方法/__repr__方法

1.基本介紹

object類有一個__str__()方法,用於返回一個"對象的描述",對應於內置函數str(),常常用於print()方法,幫助咱們查看對象的信息。
由於__str__()默認在object類中定義,因此子類能夠重寫這個方法。 python

不一樣語言中對應的不一樣的方法名:git

  1. Python語言: __str__()方法
  2. JAVA語言:toString()方法
  3. PHP語言:__toString()方法

2.方法定義

__str__()默認定義在類object當中。github

def __str__(self, *args, **kwargs): # real signature unknown
        """ Return str(self). """
        pass

3.簡單示例

示例代碼:markdown

class Student(object):
    pass

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return "名字:{0},年齡:{1}".format(self.name, self.age)

s1 = Student()
print(s1)
print("--" * 20)

p1 = Person("聶發俊", 100)
print(p1)

運行結果:ide

<__main__.Student object at 0x0000015E99B5F3C8>
----------------------------------------
名字:聶發俊,年齡:100

程序說明:函數

  1. 類Student直接繼承類object,因此__str__()也直接沿用,因此打印內容格式以下:<模塊名.類名 被繼承類名 at 內存地址>的格式
  2. 類Person繼承類object,可是定義了__str__(),屬於子類重寫父類方法,採用子類的__str__()方法,因此執行打印的時候,輸出:名字:聶發俊,年齡:100.

4.__str____repr__區別

str()函數和__str__在平常的開發看的不少,可是可能不多人會注意__repr__,這兩個很接近,可是有一些細微的差異。
相同點: 兩個都是打印輸出功能的函數
不一樣點: __str__是面向用戶顯示的,在IDE和命令行都出現,很常見。__repr__是面向程序顯示,只出如今命令行,不多見。
示例代碼:命令行

>>> class Person:
...     def __init__(self, name, age):
...             self.name = name
...             self.age = age
...     def __str__(self):
...             return "__str__:{0},{1}".format(self.name, self.age)
...     def __repr__(self):
...             return "__repr__:{0},{1}".format(self.name, self.age)
...
>>> p1 = Person("niefajun", 100)
>>> p1
__repr__:niefajun,100
>>> print(p1)
__str__:niefajun,100

程序說明:code

  1. 在命令行環境中,定義類Person,包含兩個實例屬性nameage,另外重寫了__str__(self)__repr__(self)兩個方法,而且實例化對象p1
  2. 當單獨執行>>> p1的時候,因爲在命令行環境,這個時候會執行__repr__(self),完成打印功能,因此顯示:__repr__:niefajun,100,而當使用print(p1)至關因而給用戶看的,會調用__str__(self)方法,因此輸出:__str__:niefajun,100
注意: 在python文件中使用的都是__str__

備註:
更多精彩博客,請訪問: 聶發俊的技術博客
對應視頻教程,請訪問: python400
完整markdown筆記,請訪問: python400_learn_github
相關文章
相關標籤/搜索