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

Python常用特殊方法實(shí)例總結(jié)

 更新時(shí)間:2019年03月22日 10:37:08   作者:AutumnBegins  
這篇文章主要介紹了Python常用特殊方法,結(jié)合實(shí)例形式總結(jié)分析了Python常見的__init__、__new__、__del__、__str__、__repr__等特殊方法與描述符相關(guān)功能及使用技巧,需要的朋友可以參考下

本文實(shí)例講述了Python常用特殊方法。分享給大家供大家參考,具體如下:

1 __init__和__new__

__init__方法用來初始化類實(shí)例;__new__方法用來創(chuàng)建類實(shí)例。

主要的區(qū)別:

1).__init__通常用于初始化一個(gè)新實(shí)例,控制初始化的過程,發(fā)生在類實(shí)例被創(chuàng)建完以后。它是實(shí)例級(jí)別的方法。

2).__new__通常用于控制生成一個(gè)新實(shí)例的過程。它是類級(jí)別的方法。

__new__具體的作用:

1) 繼承一些不可變的class時(shí)(比如int, str, tuple),提供一個(gè)自定義這些類的實(shí)例化過程的途徑

2) 實(shí)現(xiàn)自定義的metaclass

例子:實(shí)現(xiàn)永遠(yuǎn)返回正數(shù)

class PositiveInteger(int): #繼承類int
  def __new__(cls, value):
    return super().__new__(cls, abs(value)) #返回父類的__new__方法
i = PositiveInteger(-3) #類實(shí)例化
print(i)
3

注意點(diǎn):

關(guān)于__init__方法:第一個(gè)參數(shù)必須是self;無返回值

關(guān)于__new__方法:

1) 繼承自object的新式類才有__new__

2) __new__至少要有一個(gè)參數(shù)cls,代表要實(shí)例化的類,此參數(shù)在實(shí)例化時(shí)由Python解釋器自動(dòng)提供

3) __new__必須要有返回值,返回實(shí)例化出來的實(shí)例(也就是__init__self),可以返回父類__new__出來的實(shí)例,或者直接是object的__new__出來的實(shí)例

2 __del__方法

當(dāng)對(duì)象所有的引用都被刪除后觸發(fā)該方法,代碼如下:

class Testdel():
  def __del__(self):
    print("using __del__")
t = Testdel()
t1 = t
del t1
del t
using __del__

3 __str__和__repr__

__repr____str__這兩個(gè)方法都是用于顯示的,__str__是面向用戶的,而__repr__面向程序員

定義__repr__的簡(jiǎn)單方法:定義了__str__之后,賦值給__repr__,如下:

__repr__ = __str__

4 屬性訪問

__getattr__(self, name):當(dāng)用戶試圖獲取一個(gè)不存在的屬性(name)時(shí)的行為

__getattribute__(self, name):當(dāng)類的屬性被訪問時(shí)的行為

__setattr__(self, name, value):當(dāng)一個(gè)屬性被設(shè)置時(shí)的行為

__delattr__(self, name):當(dāng)一個(gè)屬性被刪除時(shí)的行為

死循環(huán)陷阱:

class Rectangle:
  def __init__(self, width=0, height=0):
    self.width = width
    self.height = height
  def __setattr__(self, name, value):
    if name == ‘square':
      self.width = value
      self.height = value
    else:
      self.name = value
  def getArea(self):
    return self.width * self.height
r = Rectangle(3,4)

實(shí)例化r = Rectangle(3, 4)就會(huì)出現(xiàn)死循環(huán),因?yàn)樵?code>__init__里面出現(xiàn)了設(shè)置屬性值,跳到__setattr__里面e的self.name = value這一句,也就是繼續(xù)賦值操作self.width = width,所以進(jìn)入死循環(huán)。解決方法:

1) else子句改為:super().__setattr__(name, value)

2) else子句改為:self.__dict__[name] = value

5 描述符:將某種特殊類型的類的實(shí)例指派給另一個(gè)類的屬性

特殊類型是指:

__get__(self, instance, owner):訪問屬性,返回屬性的值

__set__(self, instance, value):用于設(shè)置屬性,不返回任何內(nèi)容

__delete__(self, instance):刪除屬性,不返回任何內(nèi)容

self:描述符類本身的實(shí)例,instance:擁有者類的實(shí)例,owner:擁有者,類本身

class MyDecriptor:
  def __get__(self, instance, owner): #理解self instance owner的含義
    print(‘getting...', self, instance, owner)
  def __set__(self, instance, value):
    print(‘setting…',self, instance,value)
  def __delete__(self, instance):
    print(‘deleting…',self, instance)
class Test:
  x = MyDecriptor()
test = Test() #實(shí)例化
test.x
test.x = ‘X-man'
del test.x

關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Python基礎(chǔ)必備之語法結(jié)構(gòu)詳解

    Python基礎(chǔ)必備之語法結(jié)構(gòu)詳解

    Python語法定義了用于在 Python 編程中創(chuàng)建句子的所有規(guī)則集。如果想更深入地研究 Python 詞法結(jié)構(gòu),需要了解構(gòu)成語句的句法元素,即構(gòu)成 Python 程序的基本單元,涵蓋控制結(jié)構(gòu),在不同代碼組之間引導(dǎo)程序流的構(gòu)造,快跟隨小編一起學(xué)習(xí)一下吧
    2022-04-04
  • 詳解pandas獲取Dataframe元素值的幾種方法

    詳解pandas獲取Dataframe元素值的幾種方法

    這篇文章主要介紹了詳解pandas獲取Dataframe元素值的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Python pickle模塊實(shí)現(xiàn)對(duì)象序列化

    Python pickle模塊實(shí)現(xiàn)對(duì)象序列化

    這篇文章主要介紹了Python pickle模塊實(shí)現(xiàn)對(duì)象序列化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • wxpython 學(xué)習(xí)筆記 第一天

    wxpython 學(xué)習(xí)筆記 第一天

    wxPython是Python編程語言的一個(gè)GUI工具箱。他使得Python程序員能夠輕松的創(chuàng)建具有健壯、功能強(qiáng)大的圖形用戶界面的程序。
    2009-02-02
  • Python新手學(xué)習(xí)過程記錄之基礎(chǔ)環(huán)境:環(huán)境變量、版本區(qū)分、虛擬環(huán)境

    Python新手學(xué)習(xí)過程記錄之基礎(chǔ)環(huán)境:環(huán)境變量、版本區(qū)分、虛擬環(huán)境

    剛開始接觸Python開發(fā)語言,可能就會(huì)遇到一些棘手的問題,比如電腦上不知不覺已經(jīng)安裝了多個(gè)python版本,python3.8/3.10/3.11,甚至一些軟件中也集成有python解釋器;那么我編寫的python代碼,到底是使用哪個(gè)解釋器在執(zhí)行?我通過pip包管理工具安裝的依賴包到底在那個(gè)地方
    2024-05-05
  • python 如何在list中找Topk的數(shù)值和索引

    python 如何在list中找Topk的數(shù)值和索引

    這篇文章主要介紹了python 如何在list中找Topk的數(shù)值和索引的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python操作MongoDB數(shù)據(jù)庫(kù)的方法示例

    Python操作MongoDB數(shù)據(jù)庫(kù)的方法示例

    這篇文章主要介紹了Python操作MongoDB數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式分析了Python命令行模式下操作MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)連接、查找、刪除、排序等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • Python圖像運(yùn)算之圖像灰度非線性變換詳解

    Python圖像運(yùn)算之圖像灰度非線性變換詳解

    這篇文章將詳細(xì)講解圖像灰度非線性變換。圖像灰度非線性變換主要包括對(duì)數(shù)變換、冪次變換、指數(shù)變換、分段函數(shù)變換,通過非線性關(guān)系對(duì)圖像進(jìn)行灰度處理,本文主要講解三種常見類型的灰度非線性變換,感興趣的可以了解一下
    2022-03-03
  • Python?Tkinter?Gui運(yùn)行不卡頓(解決多線程解決界面卡死問題)

    Python?Tkinter?Gui運(yùn)行不卡頓(解決多線程解決界面卡死問題)

    最近寫的Python代碼不知為何,總是執(zhí)行到一半卡住不動(dòng),所以下面這篇文章主要給大家介紹了關(guān)于Python?Tkinter?Gui運(yùn)行不卡頓,解決多線程解決界面卡死問題的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • python tornado使用流生成圖片的例子

    python tornado使用流生成圖片的例子

    今天小編就為大家分享一篇python tornado使用流生成圖片的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11

最新評(píng)論

白沙| 迁安市| 榆社县| 武汉市| 清新县| 禹城市| 上犹县| 洱源县| 长岭县| 昌乐县| 巩留县| 布尔津县| 镇安县| 邯郸市| 固镇县| 景洪市| 道孚县| 合川市| 潞城市| 丹寨县| 金溪县| 城步| 桂林市| 香港| 麻栗坡县| 钟祥市| 都兰县| 罗定市| 汉中市| 吴江市| 陇川县| 黑龙江省| 定安县| 太仓市| 鄂伦春自治旗| 全南县| 高邑县| 定安县| 桃园市| 盖州市| 安图县|