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

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

 更新時間:2020年09月20日 17:11:08   作者:StarryLand  
這篇文章主要給大家介紹了關(guān)于Python中特殊方法以及應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(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)遠(yuǎn)小于實現(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ù),能把一個對象用字符串的形式表示出來。實際上這種字符串表達(dá)是通過對象內(nèi)部的 __repr__ 特殊方法定義的。默認(rèn)情況下,在控制臺里查看某個對象時,輸出的字符串一般是 <xxx object at 0x7fc99d6ab2e0> 這種形式。

__repr__ 返回的字符串應(yīng)該準(zhǔn)確、無歧義,并盡可能表示出該對象是如何創(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。

默認(rèn)情況下,自定義類的實例總是為真。除非這個類對于 __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)文章

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

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

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

    python set集合使用方法解析

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

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

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

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

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

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

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

    python裝飾器實現(xiàn)對異常代碼出現(xiàn)進行自動監(jiān)控的實現(xiàn)方法

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

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

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

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

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

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

    用Pycharm寫Python代碼有一段時間了,最近發(fā)現(xiàn)了一個Pycharm的一個小技巧想分享給大家,下面這篇文章主要給大家介紹了關(guān)于Pycharm代碼跳轉(zhuǎn)該如何回退的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    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)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05

最新評論

依兰县| 乡宁县| 罗源县| 沅陵县| 固始县| 建水县| 曲沃县| 阳信县| 博乐市| 灯塔市| 安顺市| 宜川县| 巴楚县| 绩溪县| 肇源县| 崇仁县| 赣州市| 南昌县| 南城县| 上虞市| 常熟市| 广饶县| 政和县| 平定县| 股票| 五河县| 牙克石市| 陇西县| 英超| 镇安县| 石门县| 新余市| 杂多县| 胶州市| 彭泽县| 东丽区| 自治县| 佳木斯市| 嘉祥县| 和政县| 苍南县|