日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python整形魔法_python 魔法方法

發(fā)布時間:2023/11/30 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python整形魔法_python 魔法方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、什么是魔法方法?

魔法方法就是可以給你的類增加魔力的特殊方法,如果你的對象實(shí)現(xiàn)(重載)了這些方法中的某一個,那么這個方法就會在特殊的情況下被 Python 所調(diào)用,你可以定義自己想要的行為,而這一切都是自動發(fā)生的。它們經(jīng)常是兩個下劃線包圍來命名的(比如 __init__,__lt__),Python的魔法方法是非常強(qiáng)大的,所以了解其使用方法也變得尤為重要!

2、__init__(self[, ...]),__new__(cls[, ...]),__del__(self)

__init__ 構(gòu)造器,當(dāng)一個實(shí)例被創(chuàng)建的時候初始化的方法。但是它并不是實(shí)例化調(diào)用的第一個方法,__new__才是實(shí)例化對象調(diào)用的第一個方法,它只取下 cls參數(shù),并把其他參數(shù)傳給 __init__。 __new__很少使用,但是也有它適合的場景,尤其是當(dāng)類繼承自一個像元組或者字符串這樣不經(jīng)常改變的類型的時候。

魔法方法

含義

基本的魔法方法

__new__(cls[, ...])

1. __new__ 是在一個對象實(shí)例化的時候所調(diào)用的第一個方法

2. 它的第一個參數(shù)是這個類,其他的參數(shù)是用來直接傳遞給 __init__ 方法

3. __new__ 決定是否要使用該 __init__ 方法,因?yàn)?__new__ 可以調(diào)用其他類的構(gòu)造方法或者直接返回別的實(shí)例對象來作為本類的實(shí)例,如果 __new__ 沒有返回實(shí)例對象,則 __init__ 不會被調(diào)用

4. __new__ 主要是用于繼承一個不可變的類型比如一個 tuple 或者 string

__init__(self[, ...])

構(gòu)造器,當(dāng)一個實(shí)例被創(chuàng)建的時候調(diào)用的初始化方法

__del__(self)

析構(gòu)器,當(dāng)一個實(shí)例被銷毀的時候調(diào)用的方法

__call__(self[, args...])

允許一個類的實(shí)例像函數(shù)一樣被調(diào)用:x(a, b) 調(diào)用 x.__call__(a, b)

__len__(self)

定義當(dāng)被 len() 調(diào)用時的行為

__repr__(self)

定義當(dāng)被 repr() 調(diào)用時的行為 ,如果同時重寫repr和str ,則優(yōu)先使用str的方法

__str__(self)

定義當(dāng)被 str() 調(diào)用時的行為

__bytes__(self)

定義當(dāng)被 bytes() 調(diào)用時的行為

__hash__(self)

定義當(dāng)被 hash() 調(diào)用時的行為

__bool__(self)

定義當(dāng)被 bool() 調(diào)用時的行為,應(yīng)該返回 True 或 False

__format__(self, format_spec)

定義當(dāng)被 format() 調(diào)用時的行為

有關(guān)屬性

__getattr__(self, name)

定義當(dāng)用戶試圖獲取一個不存在的屬性時的行為

__getattribute__(self, name)

定義當(dāng)該類的屬性被訪問時的行為

__setattr__(self, name, value)

定義當(dāng)一個屬性被設(shè)置時的行為

__delattr__(self, name)

定義當(dāng)一個屬性被刪除時的行為

__dir__(self)

定義當(dāng) dir() 被調(diào)用時的行為

__get__(self, instance, owner)

定義當(dāng)描述符的值被取得時的行為

__set__(self, instance, value)

定義當(dāng)描述符的值被改變時的行為

__delete__(self, instance)

定義當(dāng)描述符的值被刪除時的行為

比較操作符

__lt__(self, other)

定義小于號的行為:x < y 調(diào)用 x.__lt__(y)

__le__(self, other)

定義小于等于號的行為:x <= y 調(diào)用 x.__le__(y)

__eq__(self, other)

定義等于號的行為:x == y 調(diào)用 x.__eq__(y)

__ne__(self, other)

定義不等號的行為:x != y 調(diào)用 x.__ne__(y)

__gt__(self, other)

定義大于號的行為:x > y 調(diào)用 x.__gt__(y)

__ge__(self, other)

定義大于等于號的行為:x >= y 調(diào)用 x.__ge__(y)

算數(shù)運(yùn)算符

__add__(self, other)

定義加法的行為:+

__sub__(self, other)

定義減法的行為:-

__mul__(self, other)

定義乘法的行為:*

__truediv__(self, other)

定義真除法的行為:/

__floordiv__(self, other)

定義整數(shù)除法的行為://

__mod__(self, other)

定義取模算法的行為:%

__divmod__(self, other)

定義當(dāng)被 divmod() 調(diào)用時的行為

__pow__(self, other[, modulo])

定義當(dāng)被 power() 調(diào)用或 ** 運(yùn)算時的行為

__lshift__(self, other)

定義按位左移位的行為:<<

__rshift__(self, other)

定義按位右移位的行為:>>

__and__(self, other)

定義按位與操作的行為:&

__xor__(self, other)

定義按位異或操作的行為:^

__or__(self, other)

定義按位或操作的行為:|

反運(yùn)算

__radd__(self, other)

(與上方相同,當(dāng)左操作數(shù)不支持相應(yīng)的操作時被調(diào)用)

__rsub__(self, other)

(與上方相同,當(dāng)左操作數(shù)不支持相應(yīng)的操作時被調(diào)用)

__rmul__(self, other)

(與上方相同,當(dāng)左操作數(shù)不支持相應(yīng)的操作時被調(diào)用)

__rtruediv__(self, other)

(與上方相同,當(dāng)左操作數(shù)不支持相應(yīng)的操作時被調(diào)用)

__rfloordiv__(self, other)

(與上方相同,當(dāng)左操作數(shù)不支持相應(yīng)的操作時被調(diào)用)

__rmod__(self, other)

(與上方相同,當(dāng)左操作數(shù)不支持相應(yīng)的操作時被調(diào)用)

__rdivmod__(self, other)

(與上方相同,當(dāng)左操作數(shù)不支持相應(yīng)的操作時被調(diào)用)

__rpow__(self, other)

(與上方相同,當(dāng)左操作數(shù)不支持相應(yīng)的操作時被調(diào)用)

__rlshift__(self, other)

(與上方相同,當(dāng)左操作數(shù)不支持相應(yīng)的操作時被調(diào)用)

__rrshift__(self, other)

(與上方相同,當(dāng)左操作數(shù)不支持相應(yīng)的操作時被調(diào)用)

__rxor__(self, other)

(與上方相同,當(dāng)左操作數(shù)不支持相應(yīng)的操作時被調(diào)用)

__ror__(self, other)

(與上方相同,當(dāng)左操作數(shù)不支持相應(yīng)的操作時被調(diào)用)

增量賦值運(yùn)算

__iadd__(self, other)

定義賦值加法的行為:+=

__isub__(self, other)

定義賦值減法的行為:-=

__imul__(self, other)

定義賦值乘法的行為:*=

__itruediv__(self, other)

定義賦值真除法的行為:/=

__ifloordiv__(self, other)

定義賦值整數(shù)除法的行為://=

__imod__(self, other)

定義賦值取模算法的行為:%=

__ipow__(self, other[, modulo])

定義賦值冪運(yùn)算的行為:**=

__ilshift__(self, other)

定義賦值按位左移位的行為:<<=

__irshift__(self, other)

定義賦值按位右移位的行為:>>=

__iand__(self, other)

定義賦值按位與操作的行為:&=

__ixor__(self, other)

定義賦值按位異或操作的行為:^=

__ior__(self, other)

定義賦值按位或操作的行為:|=

一元操作符

__neg__(self)

定義正號的行為:+x

__pos__(self)

定義負(fù)號的行為:-x

__abs__(self)

定義當(dāng)被 abs() 調(diào)用時的行為

__invert__(self)

定義按位求反的行為:~x

類型轉(zhuǎn)換

__complex__(self)

定義當(dāng)被 complex() 調(diào)用時的行為(需要返回恰當(dāng)?shù)闹?

__int__(self)

定義當(dāng)被 int() 調(diào)用時的行為(需要返回恰當(dāng)?shù)闹?

__float__(self)

定義當(dāng)被 float() 調(diào)用時的行為(需要返回恰當(dāng)?shù)闹?

__round__(self[, n])

定義當(dāng)被 round() 調(diào)用時的行為(需要返回恰當(dāng)?shù)闹?

__index__(self)

1. 當(dāng)對象是被應(yīng)用在切片表達(dá)式中時,實(shí)現(xiàn)整形強(qiáng)制轉(zhuǎn)換

2. 如果你定義了一個可能在切片時用到的定制的數(shù)值型,你應(yīng)該定義 __index__

3. 如果 __index__ 被定義,則 __int__ 也需要被定義,且返回相同的值

上下文管理(with 語句)

__enter__(self)

1. 定義當(dāng)使用 with 語句時的初始化行為

2. __enter__ 的返回值被 with 語句的目標(biāo)或者 as 后的名字綁定

__exit__(self, exc_type, exc_value, traceback)

1. 定義當(dāng)一個代碼塊被執(zhí)行或者終止后上下文管理器應(yīng)該做什么

2. 一般被用來處理異常,清除工作或者做一些代碼塊執(zhí)行完畢之后的日常工作

容器類型

__len__(self)

定義當(dāng)被 len() 調(diào)用時的行為(返回容器中元素的個數(shù))

__getitem__(self, key)

定義獲取容器中指定元素的行為,相當(dāng)于 self[key]

__setitem__(self, key, value)

定義設(shè)置容器中指定元素的行為,相當(dāng)于 self[key] = value

__delitem__(self, key)

定義刪除容器中指定元素的行為,相當(dāng)于 del self[key]

__iter__(self)

定義當(dāng)?shù)萜髦械脑氐男袨?/p>

__reversed__(self)

定義當(dāng)被 reversed() 調(diào)用時的行為

__contains__(self, item)

定義當(dāng)使用成員測試運(yùn)算符(in 或 not in)時的行為

自定義對象的比較問題:

is:

比較兩個對象是否為同一個對象

==: 對于一個對象而言,調(diào)用==,本質(zhì)要到對象所屬的類中查找,__eq__()方法

比較兩個對象的值是否相等

對于自定義類,如果涉及到兩個對象是否相等的操作,一般情況下,需要重寫__eq__()方法

set存儲自定義對象的問題:

set:

特性:

無序,唯一,只能存儲

hash(obj) 哈希函數(shù),求某個對象的hash值(只有不可變類型,才可以得到對應(yīng)的hash值)

hash函數(shù)的本質(zhì),會調(diào)用該對象所屬類中__hash__()方法

set底層數(shù)據(jù)結(jié)構(gòu)是哈希表:

如果set存儲自定義對象,

需要重寫兩個方法:1.__hash__()

用來決定對象的hash值,由哪個屬性來決定

2.__eq__()

用來決定自定義對象的比較算法

用來指定不同的對象之間用什么來進(jìn)行比較

class Student(object):

def __init__(self,name,age):

self.name = name

self.age = age

def __hash__(self):

return hash(self.name) + hash(self.age)

def __eq__(self, other):

return self.name == other.name and self.age == other.age

def __str__(self):

return f"姓名:{self.name},年齡:{self.age}"

stu1 = Student("張三",15)

stu2 = Student("張三",15)

stu3 = Student("張三",15)

stu4 = Student("張三",15)

sets = {stu1,stu2,stu3,stu4}

print(sets)

結(jié)果如下

總結(jié)

以上是生活随笔為你收集整理的python整形魔法_python 魔法方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 911香蕉视频 | 久久久久国产精品无码免费看 | 大乳女喂男人吃奶视频 | 精品一区二区三区免费观看 | 少妇高潮网站 | 国产亚洲精品久 | 亚洲三级在线播放 | 欧美激情午夜 | 羞羞动漫免费观看 | 中文字幕在线播放av | 女生下面流水视频 | 少妇高潮一区二区三区99欧美 | 超碰中文字幕在线 | 中文字幕乱码亚洲无线三区 | 国产精品国产 | 欧美成人一区二区三区四区 | 亚洲毛茸茸 | 欧美在线色视频 | 无码精品人妻一区二区三区湄公河 | 成人性生生活性生交3 | 欧美美女一级片 | www.色偷偷| 国产伦精品一区二区三区视频孕妇 | a网站在线观看 | 日韩一卡二卡三卡 | 看片久久 | 欧美日韩中 | av一卡二卡 | 五月婷av| 中文字幕少妇在线三级hd | 日本人做爰全过程 | 四虎永久网站 | 欧美影视一区二区三区 | 91在线精品一区二区 | 加勒比在线免费视频 | 国产乱人乱偷精品视频 | 欧美一本在线 | 国产中出视频 | 97综合 | 成人区人妻精品一区二区网站 | 久久综合九色综合欧美狠狠 | www.久操| 老司机av影院 | 中国美女黄色一级片 | 国产精品爱啪在线线免费观看 | 色xxxxxx| 精品视频第一页 | 亚州国产精品 | 久久精品视屏 | 香蕉福利| 欧美成人综合在线 | 宅男的天堂 | 亚洲一级无毛 | 激情小说av| 91高清免费视频 | 亚洲13p| 亚洲精品视频导航 | 国模吧一区二区三区 | 日韩综合在线观看 | 日本中文字幕视频 | 波多野结衣乳巨码无在线观看 | 在线视频在线观看 | 亚洲天堂8| 亚洲美女屁股眼交8 | 国产大片在线观看 | 另类第一页 | 欧美日韩成人在线观看 | 国产精品久久久久av | 日本少妇aaa | 99天堂网 | 人人妻人人澡人人爽人人精品 | 黄色a在线观看 | 日本高清久久 | 久久亚洲色图 | 精品人妻伦九区久久aaa片 | 亚洲男人的天堂在线 | 久久精品久久久 | 欧美黄色短视频 | 久久久久一区二区精码av少妇 | 天天色网站 | 中文字幕xxxx | 制服丝袜手机在线 | 办公室荡乳欲伦交换bd电影 | 欧美性猛交xxxx黑人猛交 | 国产精品国色综合久久 | 伊人久久五月 | 肉丝美脚视频一区二区 | 久久国产成人精品av | 男同av在线观看一区二区三区 | 黑人乱码一区二区三区av | 成人黄色在线观看 | 狠狠操免费视频 | 国内精品国产三级国产aⅴ久 | 欧美日韩国产免费 | 免费福利在线视频 | 国产小毛片 | 高清一区二区三区四区 | 欧美在线看片 | 久久精品一本 |