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

淺談python之新式類

 更新時(shí)間:2018年08月12日 16:34:02   作者:Dear、  
這篇文章主要介紹了淺談python之新式類,詳細(xì)的介紹了如何使用新式類和經(jīng)典類的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

前言

本文中代碼運(yùn)行的python版本一律采取2.7.13

科普:

經(jīng)典類:classic class

新式類:new-style class

  1. python2.2 之前并沒有新式類
  2. python2.2-2.7 新式類與經(jīng)典類并存, 默認(rèn)使用經(jīng)典類, 除非顯式繼承object
  3. python3.X 中去除了經(jīng)典類, 用戶定義的所有類都隱式繼承自object

 如何使用新式類

 class New(object): # 顯式繼承object類
 pass

class Old: 
 pass
  
class Old2():
 pass 

上述代碼中的3種定義類的方法, 只有第一種方法定義的是新式類.

新式類VS經(jīng)典類 

新式類與經(jīng)典類最主要的區(qū)別在于繼承順序, 事實(shí)上, 對(duì)于用戶定義的每一個(gè)類, python 都會(huì)計(jì)算出一個(gè)方法解析順序(Method Resolution Order, MRO)列表,它代表了類繼承的順序, 而由于經(jīng)典類與新式類采用的算法不一致, 相同的繼承關(guān)系可能會(huì)出現(xiàn)不一樣的MRO列表.

import inspect
class D:
  pass
 
class C(D):
  pass 
 
class B(D):
  pass
 
class A(B, C):
  pass  

print inspect.getmro(A)
# (<class __main__.A at 0x000000000322BB88>, 
# <class __main__.B at 0x000000000322B9A8>, 
# <class __main__.D at 0x000000000322BC48>, 
# <class __main__.C at 0x000000000322B948>)

class D(object):
  pass
 
class C(D):
  pass
 
class B(D):
  pass
 
class A(B, C):
  pass

print inspect.getmro(A)

# (<class '__main__.A'>, 
<class '__main__.B'>, 
<class '__main__.C'>, 
<class '__main__.D'>, 
<type 'object'>) 

可以看到, 經(jīng)典類的MRO順序A-B-D-C 與新式類的MRO順序 A-B-C-D-object 是存在差異的, 這可能會(huì)是我們?nèi)粘?huì)遇到的坑.

而除了繼承順序的差異, 新式類還添加了內(nèi)置屬性__slots__

一般來說, 每個(gè)實(shí)例都有一個(gè)字典來管理實(shí)例的屬性, 我們可以用__dict__ 來查看(__dict__并不保存類屬性),它允許我們動(dòng)態(tài)地修改實(shí)例的屬性, 但是這也意味著每個(gè)實(shí)例都會(huì)有1個(gè)獨(dú)立的字典需要我們?nèi)ゾS護(hù), 當(dāng)我們需要?jiǎng)?chuàng)建大量的實(shí)例時(shí), 這個(gè)操作是十分消耗內(nèi)存的.

當(dāng)我們?cè)诙x類時(shí)添加了__slots__屬性后, 對(duì)象在實(shí)例化時(shí)就不會(huì)創(chuàng)建字典來管理實(shí)例屬性, 而實(shí)例只能定義在__slots__里邊已經(jīng)設(shè)定好的屬性名, 不允許動(dòng)態(tài)添加其他未在__slots__里定義的屬性

 class Student(object):
 __slots__ = ('id', 'name', 'gender')
 def exam(self):
  pass

s1 = Student()
'__dict__' in dir(s1) # False
s1.id = 10001
s1.class = 1 
# AttributeError: 'Student' object has no attribute 'class'

def func():
 pass

s1.exam = func 
# AttributeError: 'Student' object attribute 'f' is read-only

使用__slots__ 后我們不再能夠動(dòng)態(tài)地修改實(shí)例的屬性, 那么使用__slots__究竟有什么好處呢?

優(yōu)點(diǎn):
 1.節(jié)省內(nèi)存
 2.提高屬性訪問速度

缺點(diǎn):
 1.不能動(dòng)態(tài)修改實(shí)例屬性

當(dāng)然, 除了繼承順序和__slots__, 新式類添加了__getattribute__方法, 還修改了實(shí)例的類型

 class New(object):
 pass
 
class Old:
 pass
 
new = New()
old = Old()
print(new)
# <__main__.New object at 0x0000000003262208>
print(old)
# <__main__.Old instance at 0x000000000321C6C8>

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python內(nèi)置函數(shù)int()的具體使用

    Python內(nèi)置函數(shù)int()的具體使用

    這篇文章主要為大家介紹了Python內(nèi)置函數(shù)int()的具體使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • python 實(shí)現(xiàn)性別識(shí)別

    python 實(shí)現(xiàn)性別識(shí)別

    這篇文章主要介紹了python 實(shí)現(xiàn)性別識(shí)別的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • Httprunner簡介、安裝及基本使用教程

    Httprunner簡介、安裝及基本使用教程

    httprunner是一款面向 HTTP(S) 協(xié)議的通用測試框架。只需編寫維護(hù)一份 YAML/JSON 腳本,即可實(shí)現(xiàn)自動(dòng)化測試、性能測試、線上監(jiān)控、持續(xù)集成等多種測試需求,本文給大家介紹Httprunner安裝使用教程,感興趣的朋友一起看看吧
    2022-02-02
  • 基于Python實(shí)現(xiàn)RLE格式分割標(biāo)注文件的格式轉(zhuǎn)換

    基于Python實(shí)現(xiàn)RLE格式分割標(biāo)注文件的格式轉(zhuǎn)換

    本文將以Airbus Ship Detection Challenge為例,為大家詳細(xì)講解Python實(shí)現(xiàn)RLE格式分割標(biāo)注文件格式轉(zhuǎn)換的方法,感興趣的可以了解一下
    2022-08-08
  • Python OpenCV快速入門教程

    Python OpenCV快速入門教程

    這篇文章主要介紹了Python OpenCV快速入門教程,幫助大家更好的利用opencv處理圖像,感興趣的朋友可以了解下
    2021-04-04
  • 請(qǐng)不要重復(fù)犯我在學(xué)習(xí)Python和Linux系統(tǒng)上的錯(cuò)誤

    請(qǐng)不要重復(fù)犯我在學(xué)習(xí)Python和Linux系統(tǒng)上的錯(cuò)誤

    本人已經(jīng)在運(yùn)維行業(yè)工作了將近十年,我最早接觸Linux是在大二的樣子,那時(shí)候只追求易懂,所以就選擇了Ubuntu作為學(xué)習(xí)、使用的對(duì)象,它簡單、易用、好操作、界面絢麗,對(duì)于想接觸Linux的新手來說是非常不錯(cuò)的
    2016-12-12
  • python制圖之小提琴圖示例代碼

    python制圖之小提琴圖示例代碼

    這篇文章主要介紹了python制圖之小提琴圖的相關(guān)資料,提琴圖結(jié)合箱線圖和核密度估計(jì),展示數(shù)據(jù)分布和概率密度,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • Python使用grequests并發(fā)發(fā)送請(qǐng)求的示例

    Python使用grequests并發(fā)發(fā)送請(qǐng)求的示例

    這篇文章主要介紹了Python使用grequests并發(fā)送請(qǐng)求的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • Python sys.path詳細(xì)介紹

    Python sys.path詳細(xì)介紹

    這篇文章詳細(xì)介紹了Python sys.path,有需要的朋友可以參考一下
    2013-10-10
  • 使用Python分析文本數(shù)據(jù)的詞頻并詞云圖可視化

    使用Python分析文本數(shù)據(jù)的詞頻并詞云圖可視化

    這篇文章主要給大家介紹了關(guān)于如何使用Python分析文本數(shù)據(jù)的詞頻并詞云圖可視化,文章中有詳細(xì)的圖文介紹和代碼示例,對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

浦东新区| 山西省| 迁西县| 突泉县| 双江| 淮滨县| 敦化市| 南汇区| 安达市| 武胜县| 普定县| 武冈市| 自治县| 祥云县| 称多县| 金门县| 广饶县| 秭归县| 麻城市| 安龙县| 桓台县| 天门市| 肇源县| 白山市| 长兴县| 浦城县| 宁安市| 宁强县| 乌鲁木齐县| 亳州市| 黄浦区| 临桂县| 枣庄市| 临城县| 武定县| 株洲县| 集贤县| 蚌埠市| 南充市| 邵东县| 连平县|