欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中的特殊方法以及應(yīng)用詳解

 更新時間:2020年09月20日 17:11:08   作者:StarryLand  
這篇文章主要給大家介紹了關(guān)于Python中特殊方法以及應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

Python 中的特殊方法主要是為了被解釋器調(diào)用的,因此應(yīng)該盡量使用 len(my_object) 而不是 my_object.__len__() 這種寫法。在執(zhí)行 len(my_object) 時,Python 解釋器會自行調(diào)用 my_object 中實現(xiàn)的 __len__ 方法。

除非有大量的元編程存在,直接調(diào)用特殊方法的頻率應(yīng)遠小于實現(xiàn)它們的次數(shù)。

模擬數(shù)值類型

可以通過在自定義對象中實現(xiàn) __add__ 和 __mul__ 等特殊方法 ,令其支持 +、* 等運算符。

如下面的模擬向量的 Vector 類:

# vector.py
from math import hypot

class Vector:
  def __init__(self, x=0, y=0):
    self.x = x
    self.y = y

  def __repr__(self):
    return f'Vector({self.x}, {self.y})'

  def __abs__(self):
    return hypot(self.x, self.y)

  def __bool__(self):
    return bool(self.x or self.y)

  def __add__(self, other):
    return Vector(self.x + other.x, self.y + other.y)

  def __mul__(self, scalar):
    return Vector(self.x * scalar, self.y * scalar)

運行效果如下:

>>> from vector import Vector
>>> v1 = Vector(2, 4)
>>> v2 = Vector(2, 1)
>>> v1 + v2
Vector(4, 5)
>>> v = Vector(3, 4)
>>> abs(v)
5.0
>>> v * 3
Vector(9, 12)

對象的字符串表示

Python 有一個 repr 內(nèi)置函數(shù),能把一個對象用字符串的形式表示出來。實際上這種字符串表達是通過對象內(nèi)部的 __repr__ 特殊方法定義的。默認情況下,在控制臺里查看某個對象時,輸出的字符串一般是 <xxx object at 0x7fc99d6ab2e0> 這種形式。

__repr__ 返回的字符串應(yīng)該準確、無歧義,并盡可能表示出該對象是如何創(chuàng)建的。比如前面的 Vector 對象,其 __repr__ 中定義的字符串形式類似于 Vector(3, 4),和對象初始化的語法非常近似。

__repr__ 和 __str__ 的區(qū)別在于,__str__ 是在向?qū)ο髴?yīng)用 str() 函數(shù)(或者用 print 函數(shù)打印某個對象)時被調(diào)用。其返回的字符串對終端用戶更友好。

如果只想實現(xiàn)其中一個特殊方法,__repr__ 應(yīng)該是更優(yōu)的選擇。在對象沒有實現(xiàn) __str__ 方法的情況下,Python 解釋器會用 __repr__ 代替。

# myclass.py
class MyClass:
  def __repr__(self):
    return 'MyClass'

  def __str__(self):
    return 'This is an instance of MyClass'

>>> from myclass import MyClass
>>> my = MyClass()
>>> my
MyClass
>>> print(my)
This is an instance of MyClass

自定義布爾值

Python 里有 bool 類型,但實際上任何對象都可以用在需要 bool 類型的上下文(比如 if 或 while 語句)中。為了判斷某個值 x 的真假,Python 會調(diào)用 bool(x) 返回 True 或 False。

默認情況下,自定義類的實例總是為真。除非這個類對于 __bool__ 或 __len__ 方法有自己的實現(xiàn)。
bool(x) 實際上調(diào)用了對象 x 中的 __bool__ 方法。如不存在 __bool__ 方法,則 bool(x) 會嘗試調(diào)用 x.__len__(),返回 0 則為 False,否則為 True。

# boolclass.py
class BoolClass:
  def __init__(self):
    self.list = []

  def add(self, item):
    self.list.append(item)

  def __len__(self):
    return len(self.list)

>>> from boolclass import BoolClass
>>> b = BoolClass()
>>> len(b)
0
>>> bool(b)
False
>>> b.add(1)
>>> len(b)
1
>>> bool(b)
True
# boolclass.py
class BoolClass:
  def __init__(self):
    self.list = []

  def add(self, item):
    self.list.append(item)

  def __len__(self):
    return len(self.list)

  def __bool__(self):
    return bool(sum(self.list))

>>> from boolclass import BoolClass
>>> b = BoolClass()
>>> b.add(1)
>>> len(b)
1
>>> bool(b)
True
>>> b.add(-1)
>>> len(b)
2
>>> bool(b)
False

參考資料

Fluent Python

總結(jié)

到此這篇關(guān)于Python中特殊方法以及應(yīng)用詳解的文章就介紹到這了,更多相關(guān)Python特殊方法及應(yīng)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python3中exp()函數(shù)用法分析

    Python3中exp()函數(shù)用法分析

    在本篇文章里小編給大家整理了關(guān)于Python3中exp()函數(shù)用法以及相關(guān)知識點,需要的朋友們學(xué)習(xí)下。
    2019-02-02
  • Python刪除字符串中字符的四種方法示例代碼

    Python刪除字符串中字符的四種方法示例代碼

    這篇文章主要介紹了Python刪除字符串中字符的四種方法,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • win10環(huán)境下python3.5安裝步驟圖文教程

    win10環(huán)境下python3.5安裝步驟圖文教程

    本文通過圖文并茂的形式給大家介紹了win10環(huán)境下python3.5安裝步驟,需要的朋友可以參考下
    2017-02-02
  • python?turtle庫畫圣誕樹詳細代碼教程

    python?turtle庫畫圣誕樹詳細代碼教程

    這篇文章主要介紹了python?turtle庫畫圣誕樹詳細代碼教程,圣誕節(jié)快到了,下面小編就來利用python?turtle庫畫一顆圣誕樹,?主要成分有圣誕樹的本體、大小蝴蝶結(jié)、星星、圣誕帽和襪子,需要的朋友可以參考一下
    2021-12-12
  • python添加列表元素append(),extend()及?insert()

    python添加列表元素append(),extend()及?insert()

    這篇文章主要介紹了python添加列表元素append(),extend()及?insert(),列表是儲存元素的數(shù)據(jù)類型,既然能存儲元素,那么就類似數(shù)據(jù)庫一樣,增刪改查的一些功能就不能少了。下面我們就來先看看添加列表元素方法有哪些,需要的朋友可以參考一下
    2022-03-03
  • Python裝飾器實現(xiàn)函數(shù)運行時間的計算

    Python裝飾器實現(xiàn)函數(shù)運行時間的計算

    這篇文章主要為大家詳細介紹了Python函數(shù)運行時間的計算,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • python 鏈接sqlserver 寫接口實例

    python 鏈接sqlserver 寫接口實例

    這篇文章主要介紹了python 鏈接sqlserver 寫接口實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 在Python中給Nan值更改為0的方法

    在Python中給Nan值更改為0的方法

    今天小編就為大家分享一篇在Python中給Nan值更改為0的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python實現(xiàn)提取語句中的人名

    Python實現(xiàn)提取語句中的人名

    這篇文章主要為大家介紹一個小工具:可以將語句中的人名提取出來。文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-01-01
  • 用python畫個敬業(yè)福字代碼

    用python畫個敬業(yè)福字代碼

    大家好,本篇文章主要講的是用python畫個敬業(yè)福字代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01

最新評論