程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python魔法方法(7):__format __(self, format_spec) 方法

編輯:Python

Python 的對象天生擁有一些神奇的方法,它們總被雙下劃線所包圍,它們是面向對象的 Python 的一切。它們是可以給你的類增加魔力的特殊方法,如果你的對象實現(重載)了某一個魔法方法,那麼這個方法就會在特殊的情況下自動被 Python 所調用。

功能

定義對象被format()函數調用時的行為,常用於字符串的格式化輸出。

參數

self代表一個對象;format_spec表示格式控制符(可自定義),它將接收’:‘後面的字符串(如’{0: string}’.format(object) ,會將字符串’string’傳給format_spec)

返回值

必須是一個字符串,否則拋出異常。

示例

date_dic = {
'ymd': '{0.year}:{0.month}:{0.day}',
'dmy': '{0.day}/{0.month}/{0.year}',
'mdy': '{0.month}-{0.day}-{0.year}',
}
class MyText:
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
def __format__(self, format_spec):
if not format_spec or format_spec not in date_dic:
format_spec = 'ymd'
fmt = date_dic[format_spec]
return fmt.format(self)
d1 = MyText(2019, 9, 17)
# 2019: 9:17
print('{0:ymd}'.format(d1))

執行結果:

2019:9:17

可以在類當中重載__format__函數,這樣就可以在外部直接通過format函數來調用對象,輸出想要的結果。

class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return 'x: %s, y: %s' % (self.x, self.y)
def __format__(self, code):
return 'x: {x}, y: {y}'.format(x=self.x, y=self.y)
p = Point(3, 5)
print(f'this point is {p}')

執行結果:

this point is x: 3, y: 5

通過重載__format__方法,把原本固定的格式化的邏輯做成了可配置的。這樣大大增加了使用過程當中的靈活性,這種靈活性在一些問題場景當中可以大大簡化和簡潔代碼。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved