在以下的文章之中我們來了解一下什麼是python中的客製化類別。了解一下什麼是python客製化類別,以及python客製化類別在python程式設計之中能起到什麼樣的作用。
看到類似__slots__這種形如__xxx__的變數或函數名稱就要注意,這些在Python中是有特殊用途的。
__slots__我們已經知道怎麼用了,__len__()方法我們也知道是為了能讓class作用於len()函數。
除此之外,Python的class中還有許多這樣有特殊用途的函數,可以幫助我們定制類別。
__str__
#我們先定義一個Student類,列印一個實例:
>>> class Student(object): ... def __init__(self, name): ... self.name = name ... >>> print(Student('Michael')) <__main__.Student object at 0x109afb190>
印出一堆<__main__.Student object at 0x109afb190>,看起來相當不好看。
怎麼能印得好看呢?只需要定義好__str__()方法,回傳一個好看的字串就可以了:
>>> class Student(object): ... def __init__(self, name): ... self.name = name ... def __str__(self): ... return 'Student object (name: %s)' % self.name ... >>> print(Student('Michael')) Student object (name: Michael)
這樣列印出來的實例,不但好看,而且容易看出實例內部重要的資料。
但細心的朋友會發現直接敲變數不用print,印出來的實例還是不好看:
>>> s = Student('Michael') >>> s<__main__.Student object at 0x109afb310>
這是因為直接顯示變數呼叫的不是__str__(),而是_ _repr__(),兩者的差別是__str__()傳回使用者看到的字串,而__repr__()回傳程式開發者所看到的字串,也就是說,__repr__()是為偵錯服務的。
解決方法是再定義一個__repr__()。但通常__str__()和__repr__()代碼都是一樣的,所以,有個偷懶的寫法:
class Student(object): def __init__(self, name): self.name = name def __str__(self): return 'Student object (name=%s)' % self.name __repr__ = __str__
以上就是本篇文章所講述的所有內容,這篇文章主要介紹了python客製化類別__str__的相關知識,希望你能藉助資料從而理解上述所說的內容。希望我在這片文章所講述的內容能夠對你有幫助,讓你學習python更加輕鬆。
更多相關知識,請造訪php中文網Python教學欄位。
以上是python定制類別__str__(實例詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!