運算子多載:字串表示

Python 物件導向程式設計

Alex Yarosh

Content Quality Analyst @ DataCamp

列印物件

class Customer:
  def __init__(self, name, balance):
    self.name, self.balance = name, balance 

cust = Customer("Maryam Azar", 3000)
print(cust)
<__main__.Customer at 0x1f8598e2240>

 

import numpy as np

arr = np.array([1,2,3])
print(arr)
[1 2 3]
Python 物件導向程式設計

__str__()

  • print(obj)str(obj)
print(np.array([1,2,3]))
[1 2 3]
str(np.array([1,2,3]))
[1 2 3]
  • 非正式,給最終使用者
  • 字串(str)表示法

__repr__()

  • repr(obj),在主控台顯示
repr(np.array([1,2,3]))
array([1,2,3])
np.array([1,2,3])
array([1,2,3])
  • 正式,給開發者
  • 可重建(repr)表示法
  • print() 的後備選項
Python 物件導向程式設計

實作:str

class Customer:
  def __init__(self, name, balance):
    self.name, self.balance = name, balance 

  def __str__(self):
    cust_str = """
    Customer:
      name: {name}
      balance: {balance}
    """.format(name = self.name, \
               balance = self.balance)
    return cust_str

cust = Customer("Maryam Azar", 3000)

# 會隱式呼叫 __str__()
print(cust)
Customer:
  name: Maryam Azar
  balance: 3000

Python 物件導向程式設計

實作:repr

class Customer:
  def __init__(self, name, balance):
    self.name, self.balance = name, balance 

  def __repr__(self):
    # 注意 name 外面的 '...'
    return "Customer('{name}', {balance})".format(name = self.name, balance = self.balance)

cust = Customer("Maryam Azar", 3000) cust # <--- # 會隱式呼叫 __repr__()
Customer('Maryam Azar', 3000) # <--- 不是 Customer(Maryam Azar, 3000)
  • __repr__() 的輸出中,用引號包住字串參數
Python 物件導向程式設計

一起來練習吧!

Python 物件導向程式設計

Preparing Video For Download...