你想改變物件例項的列印或顯示輸出,讓它們更具可讀性。
要改變乙個例項的字串表示,可重新定義它的__str__()
和__repr__()
方法。例如:
class pair:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return 'pair(, )'.format(self)
def __str__(self):
return '(, )'.format(self)
__repr__()
方法返回乙個例項的**表示形式,通常用來重新構造這個例項。 內建的repr()
函式返回這個字串,跟我們使用互動式直譯器顯示的值是一樣的。__str__()
方法將例項轉換為乙個字串,使用str()
或print()
函式會輸出這個字串。比如:
>>> p = pair(3, 4)
>>> p
pair(3, 4) # __repr__() output
>>> print(p)
(3, 4) # __str__() output
>>>
我們在這裡還演示了在格式化的時候怎樣使用不同的字串表現形式。 特別來講,!r
格式化**指明輸出使用__repr__()
來代替預設的__str__()
。 你可以用前面的類來試著測試下:
>>> p = pair(3, 4)
>>> print('p is '.format(p))
p is pair(3, 4)
>>> print('p is '.format(p))
p is (3, 4)
>>>
自定義__repr__()
和__str__()
通常是很好的習慣,因為它能簡化除錯和例項輸出。 例如,如果僅僅只是列印輸出或日誌輸出某個例項,那麼程式設計師會看到例項更加詳細與有用的資訊。
__repr__()
生成的文字字串標準做法是需要讓eval(repr(x)) == x
為真。 如果實在不能這樣子做,應該建立乙個有用的文字表示,並使用 < 和 > 括起來。比如:
>>> f = open('file.dat')
>>> f
>>>
如果__str__()
沒有被定義,那麼就會使用__repr__()
來代替輸出。
上面的format()
方法的使用看上去很有趣,格式化**對應的是第1個引數的x屬性。 因此,在下面的函式中,0實際上指的就是
self
本身:
def __repr__(self):
return 'pair(, )'.format(self)
作為這種實現的乙個替代,你也可以使用%
操作符,就像下面這樣:
def __repr__(self):
return 'pair(%r, %r)' % (self.x, self.y)
python物件導向(類和物件)
物件導向程式設計的2個非常重要的概念 類和物件 物件是物件導向程式設計的核心,在使用物件的過程中,為了將具有共同特徵和行為的一組物件抽象定義,提出了另外乙個新的概念 類 類就相當於製造飛機時的圖紙,用它來進行建立的飛機就相當於物件 賓士汽車 類 賓士smart 類 張三的那輛賓士smart 物件 狗...
python類物件和例項物件
類物件支援兩種操作 屬性引用和例項化。屬性引用 使用 python 中所有屬性引用所使用的標準語法 obj.name。有效的屬性名稱是類物件被建立時存在於類命名空間中的所有名稱。因此,如果類定義是這樣的 a example class i 12345 def f self return hello ...
Python 物件導向 類和物件
類 和 物件 是物件導向程式設計的 兩個 核心概念 類就相當於製造飛機時的圖紙,是乙個模板,是負責建立物件的 物件就相當於用圖紙製造的飛機 在開發過程中,應該先有類,再有物件 類中定義了什麼屬性和方法,物件中就有什麼屬性和方法,不可能多,也不可能少 在使用物件導向開發前,應該首先分析需求,確定一下,...