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

一文帶你探索Python中15個(gè)常見(jiàn)的魔術(shù)方法

 更新時(shí)間:2024年01月24日 08:11:35   作者:努力的DJ  
在Python中,特殊方法(也稱為魔術(shù)方法)是由Python解釋器自動(dòng)調(diào)用的,我們不需要手動(dòng)調(diào)用它們,本文小編為大家整理了15個(gè)常見(jiàn)特殊方法的實(shí)現(xiàn),希望對(duì)大家有所幫助

概述

在Python中,特殊方法(也稱為魔術(shù)方法)是由Python解釋器自動(dòng)調(diào)用的,我們不需要手動(dòng)調(diào)用它們,而是使用內(nèi)置函數(shù)來(lái)間接地使用它們。舉個(gè)例子,我們可以實(shí)現(xiàn)特殊方法__len__(),然后通過(guò)使用內(nèi)置函數(shù)len()來(lái)獲取對(duì)象的長(zhǎng)度。同樣地,一些特殊方法的調(diào)用是隱式的,比如在使用for循環(huán)時(shí),實(shí)際上是在使用內(nèi)置函數(shù)iter(x)來(lái)迭代對(duì)象x。

在Java中,并沒(méi)有像Python那樣簡(jiǎn)單的實(shí)現(xiàn)方式。如果要進(jìn)行比較,你需要實(shí)現(xiàn)compare方法;如果想要生成特定的對(duì)象,必須編寫(xiě)適當(dāng)?shù)臉?gòu)造器方法;如果想要打印對(duì)象,就需要實(shí)現(xiàn)toString方法等等。此外,在Java中的魔術(shù)類或方法以及各種本地方法基本上是不允許我們修改的。因此,我們還是簡(jiǎn)單地看一下Python是如何調(diào)用的吧。

常用特殊方法及實(shí)現(xiàn)

下面將介紹一些常用特殊方法和實(shí)現(xiàn)。

__init__(self, ...)

構(gòu)造函數(shù)主要用于初始化對(duì)象的屬性。通過(guò)在類中定義__init__方法,可以在創(chuàng)建對(duì)象時(shí)自動(dòng)調(diào)用該方法來(lái)初始化對(duì)象的屬性。在構(gòu)造函數(shù)中,可以通過(guò)self參數(shù)來(lái)訪問(wèn)對(duì)象的屬性和方法,并為其賦予初始值。構(gòu)造函數(shù)在對(duì)象創(chuàng)建時(shí)只會(huì)被調(diào)用一次,可以在其中執(zhí)行一些必要的初始化操作,以確保對(duì)象在創(chuàng)建后處于正確的狀態(tài)。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person = Person('xiaoyu', 18)
print(person.name)  # 輸出: xiaoyu
print(person.age)   # 輸出: 18

__str__(self)

返回對(duì)象的字符串表示,可通過(guò)print(obj)來(lái)調(diào)用。這個(gè)方法對(duì)于調(diào)試和輸出對(duì)象信息非常有用,可以提供更友好和可讀性更高的輸出結(jié)果。通過(guò)實(shí)現(xiàn)__str__方法,我們可以輕松地控制對(duì)象的打印行為,使其更符合我們的需求和預(yù)期。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"Person: {self.name}, {self.age} years old"

person = Person('xiaoyu', 18)
print(person)  # 輸出: Person: xiaoyu, 18 years old

__repr__(self)

返回對(duì)象的可打印字符串表示,可通過(guò)obj來(lái)調(diào)用。與__str__方法類似,__repr__方法也用于提供對(duì)象的字符串表示,但它的目標(biāo)是更加精確和完整地描述對(duì)象的內(nèi)部狀態(tài)和結(jié)構(gòu)。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f"Person(name={self.name}, age={self.age})"

person = Person('xiaoyu', 18)
print(person)  # 輸出: Person(name=xiaoyu, age=18)

__len__(self)

返回對(duì)象的長(zhǎng)度,可通過(guò)len(obj)來(lái)調(diào)用。在Python中,len()函數(shù)通常用于獲取容器對(duì)象的元素個(gè)數(shù),比如列表、字符串、字典等。通過(guò)實(shí)現(xiàn)__len__方法,我們可以自定義對(duì)象的長(zhǎng)度,并使其適應(yīng)于特定的應(yīng)用場(chǎng)景。例如,如果我們定義了一個(gè)自定義的容器類,可以通過(guò)實(shí)現(xiàn)__len__方法來(lái)返回容器中元素的個(gè)數(shù)。這樣,我們就可以像對(duì)待其他內(nèi)置容器一樣,使用len()函數(shù)來(lái)獲取自定義容器對(duì)象的長(zhǎng)度。

class MyList:
    def __init__(self):
        self.data = []

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

my_list = MyList()
my_list.data = [1, 2, 3, 4, 5]
print(len(my_list))  # 輸出: 5

__getitem__(self, key)

獲取對(duì)象的指定元素,可通過(guò)obj[key]來(lái)調(diào)用。并將鍵值key傳遞給它作為參數(shù)。

class MyList:
    def __init__(self):
        self.data = []

    def __getitem__(self, key):
        return self.data[key]

my_list = MyList()
my_list.data = [1, 2, 3, 4, 5]
print(my_list[2])  # 輸出: 3

__setitem__(self, key, value)

設(shè)置對(duì)象的指定元素,通過(guò)重載該方法,可以實(shí)現(xiàn)通過(guò)obj[key] = value來(lái)調(diào)用該方法。

class MyList:
    def __init__(self):
        self.data = []

    def __setitem__(self, key, value):
        self.data[key] = value

my_list = MyList()
my_list.data = [1, 2, 3, 4, 5]
my_list[2] = 10
print(my_list.data)  # 輸出: [1, 2, 10, 4, 5]

__delitem__(self, key)

刪除對(duì)象的指定元素,可通過(guò)del obj[key]來(lái)調(diào)用。當(dāng)你想要從對(duì)象中刪除特定的元素時(shí),這個(gè)方法會(huì)非常有用。

class MyList:
    def __init__(self):
        self.data = []

    def __delitem__(self, key):
        del self.data[key]

my_list = MyList()
my_list.data = [1, 2, 3, 4, 5]
del my_list[2]
print(my_list.data)  # 輸出: [1, 2, 4, 5]

__iter__(self)

返回一個(gè)可迭代對(duì)象,以便我們可以通過(guò)for item in obj的方式進(jìn)行迭代。

class MyList:
    def __init__(self):
        self.data = []

    def __iter__(self):
        return iter(self.data)

my_list = MyList()
my_list.data = [1, 2, 3, 4, 5]
for item in my_list:
    print(item)  # 輸出: 1 2 3 4 5

__next__(self)

返回迭代器的下一個(gè)元素,可通過(guò)next(obj)來(lái)調(diào)用。

class MyIterator:
    def __init__(self):
        self.data = [1, 2, 3, 4, 5]
        self.index = 0

    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration
        item = self.data[self.index]
        self.index += 1
        return item

my_iterator = MyIterator()
print(next(my_iterator))  # 輸出: 1
print(next(my_iterator))  # 輸出: 2
print(next(my_iterator))  # 輸出: 3

__call__(self, ...)

將對(duì)象作為函數(shù)調(diào)用時(shí)觸發(fā),可通過(guò)obj(...)來(lái)調(diào)用。

class MyFunc:
    def __call__(self, x, y):
        return x + y

my_func = MyFunc()
result = my_func(3, 4)
print(result)  # 輸出: 7

__eq__(self, other)

判斷對(duì)象是否相等,可通過(guò)obj == other來(lái)調(diào)用。在Java中如果判斷對(duì)象引用的話,你也需要重寫(xiě)equals這個(gè)方法。

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

    def __eq__(self, other):
        return self.x == other.x and self.y == other.y

point1 = Point(1, 2)
point2 = Point(1, 2)
print(point1 == point2)  # 輸出: True

__lt__(self, other)

判斷對(duì)象是否小于另一個(gè)對(duì)象,可通過(guò)obj < other來(lái)調(diào)用。

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

    def __lt__(self, other):
        return self.x < other.x and self.y < other.y

point1 = Point(1, 2)
point2 = Point(3, 4)
print(point1 < point2)  # 輸出: True

__gt__(self, other)

判斷對(duì)象是否大于另一個(gè)對(duì)象,可通過(guò)obj > other來(lái)調(diào)用。

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

    def __gt__(self, other):
        return self.x > other.x and self.y > other.y

point1 = Point(3, 4)
point2 = Point(1, 2)
print(point1 > point2)  # 輸出: True

__add__(self, other)

定義對(duì)象的加法操作,可通過(guò)obj + other來(lái)調(diào)用。這樣的話,你也可以對(duì)對(duì)象進(jìn)行進(jìn)行運(yùn)算操作了

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

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

vector1 = Vector(1, 2)
vector2 = Vector(3, 4)
result = vector1 + vector2
print(result.x, result.y)  # 輸出: 4 6

__sub__(self, other)

定義對(duì)象的減法操作,可通過(guò)obj - other來(lái)調(diào)用。

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

    def __sub__(self, other):
        return Vector(self.x - other.x, self.y - other.y)

vector1 = Vector(3, 4)
vector2 = Vector(1, 2)
result = vector1 - vector2
print(result.x, result.y)  # 輸出: 2 2

常用特殊(魔術(shù))方法的匯總一覽表

以下是20個(gè)常用的特殊方法及其調(diào)用方式的表格,再多的用到了我們?cè)诳匆幌戮涂梢粤?,只要記?。╛_)這個(gè)下劃線開(kāi)頭和結(jié)尾的方法就可。請(qǐng)看下表:

特殊方法描述調(diào)用方式
__init__初始化對(duì)象obj = ClassName()
__str__返回對(duì)象的字符串表示str(obj)
__len__返回對(duì)象的長(zhǎng)度len(obj)
__getitem__獲取對(duì)象的元素obj[index]
__setitem__設(shè)置對(duì)象的元素obj[index] = value
__delitem__刪除對(duì)象的元素del obj[index]
__contains__判斷對(duì)象是否包含某個(gè)元素value in obj
__add__實(shí)現(xiàn)對(duì)象的加法obj1 + obj2
__sub__實(shí)現(xiàn)對(duì)象的減法obj1 - obj2
__mul__實(shí)現(xiàn)對(duì)象的乘法obj1 * obj2
__div__實(shí)現(xiàn)對(duì)象的除法obj1 / obj2
__eq__判斷對(duì)象是否相等obj1 == obj2
__ne__判斷對(duì)象是否不相等obj1 != obj2
__lt__判斷對(duì)象是否小于obj1 < obj2
__gt__判斷對(duì)象是否大于obj1 > obj2
__le__判斷對(duì)象是否小于等于obj1 <= obj2
__ge__判斷對(duì)象是否大于等于obj1 >= obj2
__iter__返回一個(gè)迭代器對(duì)象iter(obj)
__next__返回迭代器的下一個(gè)元素next(obj)
__del__對(duì)象銷毀時(shí)調(diào)用del obj
__call__將對(duì)象作為函數(shù)調(diào)用obj()

總結(jié)

Python中的特殊方法(魔術(shù)方法)是由Python解釋器自動(dòng)調(diào)用的,用于實(shí)現(xiàn)對(duì)象的特定功能。常用的特殊方法包括__init__、__str____repr__、__len__、__getitem__、__setitem__、__delitem__、__iter__、__next____call__等。通過(guò)實(shí)現(xiàn)這些特殊方法,我們可以自定義對(duì)象的行為,使其更加符合我們的需求和預(yù)期。這些特殊方法的調(diào)用方式也有所不同,可以通過(guò)內(nèi)置函數(shù)、運(yùn)算符、迭代等方式來(lái)調(diào)用。掌握了這些特殊方法的用法,可以提高我們?cè)赑ython中編寫(xiě)類和對(duì)象的靈活性和可擴(kuò)展性。

以上就是一文帶你探索Python中15個(gè)常見(jiàn)的魔術(shù)方法的詳細(xì)內(nèi)容,更多關(guān)于Python魔術(shù)方法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • NumPy實(shí)現(xiàn)ndarray多維數(shù)組操作

    NumPy實(shí)現(xiàn)ndarray多維數(shù)組操作

    NumPy一個(gè)非常重要的作用就是可以進(jìn)行多維數(shù)組的操作,這篇文章主要介紹了NumPy實(shí)現(xiàn)ndarray多維數(shù)組操作,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 實(shí)例講解Python中整數(shù)的最大值輸出

    實(shí)例講解Python中整數(shù)的最大值輸出

    在本篇文章里小編給大家分享了關(guān)于Python中整數(shù)的最大值輸出的實(shí)例內(nèi)容,以及相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-03-03
  • python中時(shí)間轉(zhuǎn)換datetime和pd.to_datetime詳析

    python中時(shí)間轉(zhuǎn)換datetime和pd.to_datetime詳析

    這篇文章主要給大家介紹了關(guān)于python中時(shí)間轉(zhuǎn)換datetime和pd.to_datetime的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python3+Appium安裝使用教程

    Python3+Appium安裝使用教程

    這篇文章主要介紹了Python3+Appium安裝使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python中os.environ基本介紹及使用方法

    python中os.environ基本介紹及使用方法

    os.environ是Python中的一個(gè)字典對(duì)象,它包含了當(dāng)前進(jìn)程的環(huán)境變量,通過(guò)使用os.environ,可以獲取和設(shè)置環(huán)境變量的值,這篇文章主要介紹了python中os.environ基本介紹及使用方法,需要的朋友可以參考下
    2023-08-08
  • Python如何發(fā)布程序的詳細(xì)教程

    Python如何發(fā)布程序的詳細(xì)教程

    Python是一種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,現(xiàn)在很多人都在使用,尤其是其跨平臺(tái)特性及自然語(yǔ)言屬性,獲得很多人的鐘情,那么如何把Python程序打包為Windows系統(tǒng)中的exe可執(zhí)行程序呢
    2018-10-10
  • python list count統(tǒng)計(jì)個(gè)數(shù)的實(shí)現(xiàn)

    python list count統(tǒng)計(jì)個(gè)數(shù)的實(shí)現(xiàn)

    這篇文章主要介紹了python list count統(tǒng)計(jì)個(gè)數(shù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 使用python3批量下載rbsp數(shù)據(jù)的示例代碼

    使用python3批量下載rbsp數(shù)據(jù)的示例代碼

    這篇文章主要介紹了使用python3批量下載rbsp數(shù)據(jù)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Python中一些自然語(yǔ)言工具的使用的入門(mén)教程

    Python中一些自然語(yǔ)言工具的使用的入門(mén)教程

    這篇文章主要介紹了Python中一些自然語(yǔ)言工具的使用的入門(mén)教程,本文來(lái)自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • 使用Python進(jìn)行圖像裁剪的多種方法及代碼示例

    使用Python進(jìn)行圖像裁剪的多種方法及代碼示例

    這篇文章主要介紹了使用Python進(jìn)行圖像裁剪的多種方法,包括使用PIL庫(kù)和OpenCV庫(kù),還提供了高級(jí)技巧和示例代碼,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01

最新評(píng)論

华安县| 许昌县| 通海县| 沅江市| 长沙市| 长泰县| 二连浩特市| 兰西县| 保山市| 方山县| 弋阳县| 青冈县| 洛隆县| 临沂市| 阆中市| 沽源县| 太谷县| 年辖:市辖区| 南皮县| 张家界市| 宝丰县| 喜德县| 裕民县| 离岛区| 黎川县| 海林市| 定州市| 元氏县| 广南县| 蒲城县| 林芝县| 吴旗县| 嘉祥县| 全南县| 龙山县| 清水河县| 宝应县| 盘山县| 汉中市| 徐闻县| 冀州市|