日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python魔術(shù)或鄧德方法

Python 中的魔法方法是以雙下劃線開始和結(jié)束的特殊方法。它們也被稱為鄧德方法。魔法方法并不意味著由您直接調(diào)用,而是在某個(gè)動(dòng)作上從類內(nèi)部進(jìn)行調(diào)用。例如,當(dāng)您使用+運(yùn)算符將兩個(gè)數(shù)字相加時(shí),在內(nèi)部將調(diào)用__add__()方法。

10余年的碌曲網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整碌曲建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“碌曲網(wǎng)站設(shè)計(jì)”,“碌曲網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

Python 中的內(nèi)置類定義了許多神奇的方法。使用dir()函數(shù)查看一個(gè)類繼承的魔法方法數(shù)量。 例如,下面列出了在int類中定義的所有屬性和方法。

>>> dir(int)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

正如您在上面看到的,int 類包含了各種由雙下劃線包圍的神奇方法。例如,__add__方法是一種神奇的方法,當(dāng)我們使用+運(yùn)算符將兩個(gè)數(shù)字相加時(shí),它就會(huì)被調(diào)用。 考慮以下示例。 T3】

>>> num=10
>>> num + 5
15
>>> num.__add__(5)
15

可以看到,當(dāng)你做num+10時(shí),+運(yùn)算符調(diào)用__add__(10)方法。 也可以直接打num.__add__(5)會(huì)給出同樣的結(jié)果。 然而,如前所述,魔法方法并不意味著被直接調(diào)用,而是在內(nèi)部,通過一些其他的方法或動(dòng)作。

在 Python 中,魔術(shù)方法最常用于定義預(yù)定義運(yùn)算符的重載行為。例如,默認(rèn)情況下,算術(shù)運(yùn)算符對(duì)數(shù)字操作數(shù)進(jìn)行運(yùn)算。這意味著數(shù)值對(duì)象必須與+、-、*、/等運(yùn)算符一起使用。+運(yùn)算符也被定義為字符串、列表和元組類中的串聯(lián)運(yùn)算符。我們可以說+運(yùn)算符是重載的。

為了使重載行為在您自己的自定義類中可用,應(yīng)該重寫相應(yīng)的 magic 方法。例如,為了將+運(yùn)算符用于用戶定義類的對(duì)象,它應(yīng)該包括__add__()方法。

讓我們看看如何實(shí)現(xiàn)和使用一些重要的魔術(shù)方法。

new()方法

Java 和 C# 等語言使用新的運(yùn)算符來創(chuàng)建類的新實(shí)例。在 Python 中,__new__()魔法方法在__init__()方法之前被隱式調(diào)用。__new__()方法返回一個(gè)新的對(duì)象,然后由__init__()初始化。

Example: new()

class Employee:
    def __new__(cls):
        print ("__new__ magic method is called")
        inst = object.__new__(cls)
                return inst
    def __init__(self):
        print ("__init__ magic method is called")
        self.name='Satya' 

當(dāng)您創(chuàng)建Employee類的實(shí)例時(shí),上面的示例將產(chǎn)生以下輸出。

>>> emp = Employee()
__new__ magic method is called
__init__ magic method is called

因此,在__init__()方法之前調(diào)用__new__()方法。

str()方法

另一個(gè)有用的魔法方法是__str__()。它被重寫以返回任何用戶定義類的可打印字符串表示形式。 我們已經(jīng)看到str()內(nèi)置函數(shù)從對(duì)象參數(shù)返回一個(gè)字符串。例如,str(12)返回‘12’。當(dāng)被調(diào)用時(shí),它調(diào)用 int 類中的__str__()方法。

>>> num=12
>>> str(num)
'12'
>>> #This is equivalent to
>>> int.__str__(num)
'12'

現(xiàn)在讓我們重寫 Employee 類中的__str__()方法,以返回其對(duì)象的字符串表示。

Example: str()

class Employee:
    def __init__(self):
        self.name='Swati'
        self.salary=10000
    def __str__(self):
        return 'name='+self.name+' salary=$'+str(self.salary) 

查看str()函數(shù)如何在內(nèi)部調(diào)用員工類中定義的__str__()方法。這就是為什么它被稱為神奇的方法!

>>> e1=Employee()
>>> print(e1)
name=Swati salary=$10000

add()方法

在下面的示例中,一個(gè)名為 distance 的類定義了兩個(gè)實(shí)例屬性- ft 和 inch。這兩個(gè)距離對(duì)象的添加需要使用重載+運(yùn)算符來執(zhí)行。

為了實(shí)現(xiàn)這一點(diǎn),神奇的方法__add__()被覆蓋,它執(zhí)行兩個(gè)對(duì)象的英尺和英寸屬性的添加。 方法返回對(duì)象的字符串表示。

Example: Override add()

class distance:
    def __init__(self, x=None,y=None):
        self.ft=x
        self.inch=y
    def __add__(self,x):
        temp=distance()
        temp.ft=self.ft+x.ft
        temp.inch=self.inch+x.inch
        if temp.inch>=12:
            temp.ft+=1
            temp.inch-=12
            return temp
    def __str__(self):
        return 'ft:'+str(self.ft)+' in: '+str(self.inch) 

運(yùn)行上面的 Python 腳本來驗(yàn)證+運(yùn)算符的重載操作。

>>> d1=distance(3,10)
>>> d2=distance(4,4)
>>> print("d1= {} d2={}".format(d1, d2))
d1= ft:3 in: 10 d2=ft:4 in: 4
>>> d3=d1+d2
>>> print(d3)
ft:8 in: 2

ge()方法

在距離類中增加以下方法來重載>=運(yùn)算符。

Example: ge()

class distance:
    def __init__(self, x=None,y=None):
        self.ft=x
        self.inch=y
    def __ge__(self, x):
        val1=self.ft*12+self.inch
        val2=x.ft*12+x.inch
        if val1>=val2:
            return True
        else:
            return False 

當(dāng)使用>=運(yùn)算符并返回真或假時(shí),調(diào)用該方法。相應(yīng)地,可以顯示適當(dāng)?shù)男畔?/p>

>>> d1=distance(2,1)
>>> d2=distance(4,10)
>>> d1>=d2
False

重要的魔術(shù)方法

下表列出了 Python 3 中的重要魔術(shù)方法。

初始化和構(gòu)造 描述
新 (cls,其他) 在對(duì)象的實(shí)例化中被調(diào)用。
init(自身,其他) 被 new 方法調(diào)用。
del(自我) 析構(gòu)函數(shù)方法。
一元運(yùn)算符和函數(shù) 描述
pos(自我) 被要求一元正,例如+someobject。
neg(自我) 為一元負(fù)數(shù)被調(diào)用,例如-someobject。
abs(自我) 被內(nèi)置的 abs()函數(shù)調(diào)用。
_ 反轉(zhuǎn) _(自) 使用~運(yùn)算符進(jìn)行反演。
_ 回合 _(自身,n) 被內(nèi)置 round()函數(shù)調(diào)用。
_ 樓層 _(自) 被內(nèi)置的 math.floor()函數(shù)調(diào)用。
ceil(自我) 被內(nèi)置的 math.ceil()函數(shù)調(diào)用。
trunc(自助) 被內(nèi)置的 math.trunc()函數(shù)調(diào)用。
擴(kuò)充賦值 描述
iadd(自身,其他) 通過賦值來調(diào)用加法,例如 a +=b。
isub(自身,其他) 在帶賦值的減法運(yùn)算中被調(diào)用,例如 a -=b。
imul(自身、其他) 被要求進(jìn)行乘法運(yùn)算,例如 a *=b。
ifloordiv(自身,其他) 通過賦值調(diào)用整數(shù)除法,例如 a //=b。
idiv(自身,其他) 被叫去分配任務(wù),例如 a /=b。
itruediv(自身,其他) 被叫去真正的部門分配任務(wù)
imod(自我,其他) 通過賦值進(jìn)行模調(diào)用,例如 a%=b。
ipow(自身、其他) 在有賦值的指數(shù)上被調(diào)用,例如 a **=b。
ilshift(自身,其他) 通過賦值(如 a<<=b)在按位左移時(shí)被調(diào)用。
irshift(自身,其他) 通過賦值進(jìn)行右位移位調(diào)用,例如 a >>=b。
_ _(自身,其他) 通過賦值按位“與”調(diào)用,例如 a&=b。
ior(自我,其他) 通過賦值按位“或”調(diào)用,例如 a|=b。
ixor(自身、其他) 通過賦值進(jìn)行按位異或調(diào)用,例如^=b.
類型轉(zhuǎn)換魔術(shù)方法 描述
int(自我) 由內(nèi)置 int()方法調(diào)用,將類型轉(zhuǎn)換為 int。
float(自) 由內(nèi)置的浮點(diǎn)()方法調(diào)用,將類型轉(zhuǎn)換為浮點(diǎn)。
_ 復(fù)雜 _(自我) 由內(nèi)置的 complex()方法調(diào)用,將類型轉(zhuǎn)換為復(fù)雜類型。
_ 10 月 _ 日(自我) 由內(nèi)置的 int oct()方法調(diào)用,將類型轉(zhuǎn)換為八進(jìn)制。
hex(自) 由內(nèi)置的 int hex()方法調(diào)用,將類型轉(zhuǎn)換為十六進(jìn)制。
_ 索引 _(自我) 當(dāng)對(duì)象在切片表達(dá)式中使用時(shí),在類型轉(zhuǎn)換為 int 時(shí)被調(diào)用。
trunc(自助) 從 math.trunc()方法調(diào)用。
弦樂魔術(shù)方法 描述
str(自我) 方法調(diào)用以返回類型的字符串表示形式。
repr(自我) 由內(nèi)置的 int repr()方法調(diào)用以返回類型的機(jī)器可讀表示形式。
unicode(自我) 由內(nèi)置的 unicode()方法調(diào)用以返回類型的 unicode 字符串。
format(self,formatstr) 由內(nèi)置的 string.format()方法調(diào)用以返回新的字符串樣式。
hash(自我) 由內(nèi)置哈希()方法調(diào)用以返回一個(gè)整數(shù)。
_ 非零 _(自身) 由內(nèi)置 bool()方法調(diào)用以返回真或假。
dir(自助) 由內(nèi)置的 dir()方法調(diào)用以返回類的屬性列表。
sizeof(自我) 由內(nèi)置的 sys.getsizeof()方法調(diào)用以返回對(duì)象的大小。
屬性魔法方法 描述
getattr(自我,姓名) 當(dāng)訪問不存在的類的屬性時(shí)調(diào)用。
setattr(自身、名稱、值) 為類的屬性賦值時(shí)調(diào)用。
delattr(自我,姓名) 在刪除類的屬性時(shí)調(diào)用。
運(yùn)算符魔術(shù)方法 描述
_ 添加 _(自身、其他) 使用+運(yùn)算符在添加操作時(shí)被調(diào)用
sub(自身、其他) 使用-運(yùn)算符在減法運(yùn)算時(shí)被調(diào)用。
mul(自身、其他) 使用*運(yùn)算符調(diào)用乘法運(yùn)算。
floordiv(自身、其他) 使用//運(yùn)算符調(diào)用樓層劃分操作。
truediv(自我,其他) 使用/運(yùn)算符調(diào)用除法運(yùn)算。
mod(自身、其他) 使用%運(yùn)算符進(jìn)行模運(yùn)算時(shí)調(diào)用。
_ _(自身,其他[,模]) 使用**運(yùn)算符計(jì)算功率時(shí)被調(diào)用。
lt(自我,其他) 使用
le(自我,其他) 使用< =運(yùn)算符進(jìn)行比較時(shí)調(diào)用。
eq(自我,他人) 使用==運(yùn)算符進(jìn)行比較時(shí)調(diào)用。
ne(自身,其他) 使用進(jìn)行比較時(shí)調(diào)用!=運(yùn)算符。
ge(自身,其他) 使用> =運(yùn)算符進(jìn)行比較時(shí)調(diào)用。

因此,您可以使用適當(dāng)?shù)哪Хǚ椒ㄔ谧远x類中添加各種功能。

Further Reading ** https://rszalski . github . io/magic cmmethod*****


本文名稱:Python魔術(shù)或鄧德方法
文章來源:http://www.5511xx.com/article/djhpejp.html