最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

模擬數(shù)值類型

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

如下面的模擬向量的 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)

運(yùn)行效果如下:

>>> 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)

對(duì)象的字符串表示

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

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

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

如果只想實(shí)現(xiàn)其中一個(gè)特殊方法,__repr__ 應(yīng)該是更優(yōu)的選擇。在對(duì)象沒有實(shí)現(xiàn) __str__ 方法的情況下,Python 解釋器會(huì)用 __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 類型,但實(shí)際上任何對(duì)象都可以用在需要 bool 類型的上下文(比如 if 或 while 語(yǔ)句)中。為了判斷某個(gè)值 x 的真假,Python 會(huì)調(diào)用 bool(x) 返回 True 或 False。

默認(rèn)情況下,自定義類的實(shí)例總是為真。除非這個(gè)類對(duì)于 __bool__ 或 __len__ 方法有自己的實(shí)現(xiàn)。
bool(x) 實(shí)際上調(diào)用了對(duì)象 x 中的 __bool__ 方法。如不存在 __bool__ 方法,則 bool(x) 會(huì)嘗試調(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Python和Rust中內(nèi)存管理機(jī)制的實(shí)現(xiàn)與對(duì)比

    詳解Python和Rust中內(nèi)存管理機(jī)制的實(shí)現(xiàn)與對(duì)比

    Python和Rust都采用了垃圾收集(Garbage?Collection)機(jī)制來(lái)管理內(nèi)存,但它們各自的實(shí)現(xiàn)方式有很大的不同,下面就跟隨小編一起來(lái)深入了解下二者的區(qū)別吧
    2024-03-03
  • python set集合使用方法解析

    python set集合使用方法解析

    這篇文章主要介紹了python set集合使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python中PDF轉(zhuǎn)Word的多種實(shí)現(xiàn)方法

    Python中PDF轉(zhuǎn)Word的多種實(shí)現(xiàn)方法

    在日常辦公和數(shù)據(jù)處理中,經(jīng)常需要將PDF文檔轉(zhuǎn)換為Word文檔,以便進(jìn)行編輯、修改或格式調(diào)整,Python作為一種強(qiáng)大的編程語(yǔ)言,提供了多種庫(kù)和工具來(lái)實(shí)現(xiàn)這一功能,以下是對(duì)Python中PDF轉(zhuǎn)Word技術(shù)的詳細(xì)介紹,需要的朋友可以參考下
    2025-01-01
  • E: 無(wú)法定位軟件包 python3-pip問題及解決

    E: 無(wú)法定位軟件包 python3-pip問題及解決

    這篇文章主要介紹了E: 無(wú)法定位軟件包 python3-pip問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python中常見的一些魔法方法及其用途

    Python中常見的一些魔法方法及其用途

    這篇文章主要介紹了Python中常見的一些魔法方法及其用途,文中通過一個(gè)簡(jiǎn)單的Vector類示例,展示了如何使用這些魔法方法來(lái)實(shí)現(xiàn)功能豐富的類,需要的朋友可以參考下
    2024-12-12
  • python裝飾器實(shí)現(xiàn)對(duì)異常代碼出現(xiàn)進(jìn)行自動(dòng)監(jiān)控的實(shí)現(xiàn)方法

    python裝飾器實(shí)現(xiàn)對(duì)異常代碼出現(xiàn)進(jìn)行自動(dòng)監(jiān)控的實(shí)現(xiàn)方法

    這篇文章主要介紹了python裝飾器實(shí)現(xiàn)對(duì)異常代碼出現(xiàn)進(jìn)行自動(dòng)監(jiān)控的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Python namedtuple命名元組實(shí)現(xiàn)過程解析

    Python namedtuple命名元組實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Python namedtuple命名元組實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python中最好用的命令行參數(shù)解析工具(argparse)

    Python中最好用的命令行參數(shù)解析工具(argparse)

    這篇文章主要介紹了Python中最好用的命令行參數(shù)解析工具(argparse),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Pycharm技巧之代碼跳轉(zhuǎn)該如何回退

    Pycharm技巧之代碼跳轉(zhuǎn)該如何回退

    用Pycharm寫Python代碼有一段時(shí)間了,最近發(fā)現(xiàn)了一個(gè)Pycharm的一個(gè)小技巧想分享給大家,下面這篇文章主要給大家介紹了關(guān)于Pycharm代碼跳轉(zhuǎn)該如何回退的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-07-07
  • Python安裝.whl文件流程以及問題解決方法

    Python安裝.whl文件流程以及問題解決方法

    WHL文件是以Wheel格式保存的Python安裝包,Wheel是Python發(fā)行版的標(biāo)準(zhǔn)內(nèi)置包格式,下面這篇文章主要給大家介紹了關(guān)于Python安裝.whl文件流程以及問題解決方法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05

最新評(píng)論

浮山县| 璧山县| 武川县| 克拉玛依市| 万安县| 三台县| 渭源县| 抚宁县| 苗栗县| 昌宁县| 盐源县| 邵阳县| 台山市| 盈江县| 稻城县| 梧州市| 铜山县| 河北省| 武隆县| 东海县| 玉门市| 宁夏| 苗栗市| 砚山县| 连城县| 新竹县| 临泽县| 蓬溪县| 安泽县| 嘉鱼县| 明水县| 昆明市| 武夷山市| 和静县| 苍南县| 盈江县| 高平市| 上犹县| 大邑县| 克拉玛依市| 武宣县|