欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

全面理解python命名空間字典

 更新時(shí)間:2023年12月29日 10:04:24   作者:梯閱線條  
本文主要介紹了全面理解python命名空間字典,python的命名空間由字典實(shí)現(xiàn),屬性為鍵,對(duì)象為值,通過(guò)屬性找到對(duì)象,下面就來(lái)具體了解一下,感興趣的可以了解一下

python命名空間是屬性與對(duì)象的一一映射關(guān)系。

任何一個(gè)屬性通過(guò)命名空間都能找到唯一一個(gè)與之對(duì)應(yīng)的對(duì)象。

詳細(xì)點(diǎn)擊《python命名空間基礎(chǔ)知識(shí)》。

python的命名空間由字典實(shí)現(xiàn),屬性為鍵,對(duì)象為值。通過(guò)屬性找到對(duì)象。

1.1 dict

__dict__為類和實(shí)例的屬性字典—命名空間字典,通過(guò)字典找到屬性指向的對(duì)象。

實(shí)例無(wú)本身屬性則為空字典。

>>> class MySuper:
    s='梯閱線條'
    def m1(self):
        self.data1='MySuper'
>>> class MyClassA(MySuper):
    def __init__(self):
        self.data2='MyClassA'

# 類名.__dict__ 查看類的屬性字典,
# 前后帶雙下劃線的為內(nèi)置屬性 , 其他為自定義屬性        
>>> MySuper.__dict__.keys()
dict_keys(['__module__', 's', 'm1', '__dict__', '__weakref__', '__doc__'])
>>> msp=MySuper()
# 實(shí)例名.__dict__ 查看實(shí)例的屬性字典,
# 實(shí)例無(wú)本身屬性則為空。
>>> msp.__dict__.keys()
dict_keys([])
# 調(diào)用m1()通過(guò)self.屬性=值,進(jìn)行屬性賦值
>>> msp.m1()
# 實(shí)例名.__dict__ 只返回實(shí)例賦值的屬性,不返回類的屬性
>>> msp.__dict__.keys()
dict_keys(['data1'])
# 類名.__dict__ 只返回類屬性,不返回實(shí)例屬性
>>> MySuper.__dict__.keys()
dict_keys(['__module__', 's', 'm1', '__dict__', '__weakref__', '__doc__'])
>>> msp2=MySuper()
# 每個(gè)實(shí)例有獨(dú)立的屬性字典
>>> msp2.__dict__.keys()
dict_keys([])
# 創(chuàng)建實(shí)例時(shí)自動(dòng)執(zhí)行__init__()給實(shí)例屬性賦值
>>> mca=MyClassA()
>>> mca.__dict__.keys()
dict_keys(['data2'])

1.2 class

__class__獲取實(shí)例所屬類,再用獲取的類創(chuàng)建實(shí)例。

>>> class MyClass:pass
>>> c1=MyClass()
>>> c1
<__main__.MyClass object at 0x03D19C50>
# __class__ 返回實(shí)例所屬類
>>> c1.__class__
<class '__main__.MyClass'>
# 用返回的類創(chuàng)建實(shí)例對(duì)象
>>> c2=c1.__class__()
>>> c2
<__main__.MyClass object at 0x03D19CF0>

1.3 class.name

class.__name__獲取實(shí)例所屬類的類名。

>>> class MyClass:pass
>>> c1=MyClass()
>>> c1=MyClass()
# __name__ 返回實(shí)例所屬類的名字
>>> c1.__class__.__name__
'MyClass'

1.4 bases

獲取類的直接超類組成的元組。

>>> class MyClass:pass
>>> class MyClassA(MyClass):pass
>>> class MyClassB():pass
>>> class MyClassC(MyClassA,MyClassB):pass
# __bases__ 返回直接超類組成的元組
>>> MyClassC.__bases__
(<class '__main__.MyClassB'>, <class '__main__.MyClassA'>)

1.5 搜索屬性

類屬性由全部實(shí)例共享,實(shí)例屬性每個(gè)實(shí)例相互獨(dú)立。

NO屬性描述
1類屬性(1) 類屬性是指類頂層賦值生成的屬性。
(2) 全部實(shí)例共享類屬性。
2實(shí)例屬性(1)實(shí)例屬性是指通過(guò)self.屬性名=屬性值,或?qū)嵗?屬性名=屬性值,獲取的屬性。
(2)每個(gè)實(shí)例的實(shí)例屬性相互獨(dú)立,互不干擾。
(3)實(shí)例無(wú)屬性時(shí),實(shí)例命名空間字典為空。

實(shí)例和類搜索屬性都在屬性命名空間字典查找。

搜索實(shí)例屬性先從實(shí)例屬性命名空間查找,再到類,超類查找,直到找到為止。

搜索類屬性從類屬性命名空間查找,再到超類查找,直到找到為止。

步驟描述
1通過(guò)“實(shí)例名.dict”獲取實(shí)例屬性。
2若無(wú),則通過(guò)“實(shí)例名.class”獲取實(shí)例所屬類。
3通過(guò)“類名.dict”獲取類屬性。
4若無(wú),則通過(guò)“類名.base”獲取實(shí)例所屬類的直接超類。
5超類重復(fù)3到4步驟,獲取類屬性。
>>> class MySuper:
    s='梯閱線條'
    def m1(self):
        self.data1='MySuper'

>>> class MyClassA(MySuper):
    def __init__(self):
        self.data2='MyClassA'

>>> msp1=MySuper()
>>> msp1.__dict__
{}
>>> msp1.__class__.__name__
'MySuper'
>>> msp1.m1()
>>> msp1.__dict__
{'data1': 'MySuper'}
>>> mca1=MyClassA()
>>> mca1.__dict__
{'data2': 'MyClassA'}
>>> mca1.__dict__
{'data2': 'MyClassA'}
>>> MySuper.__dict__.keys()
dict_keys(['__module__', 's', 'm1', '__dict__', '__weakref__', '__doc__'])
>>> mca1.m1()
>>> mca1.__dict__
{'data2': 'MyClassA', 'data1': 'MySuper'}
# 搜索s,從 MySuper.__dict__ 類命名空間獲取
>>> mca1.s
'梯閱線條'
# 搜索 data1 和 data2 從 實(shí)例命名看空間獲取
>>> mca1.data1
'MySuper'
>>> mca1.data2
'MyClassA'

1.6 dir

dir(類或?qū)嵗?,返回類或?qū)嵗膶傩?,包括系統(tǒng)屬性,比__dict__.keys()多。

NO使用描述
1類.dict.keys()返回類屬性,不包括系統(tǒng)屬性
2實(shí)例.dict.keys()返回實(shí)例屬性,不包括類屬性
3子類.dict.keys()返回子類屬性,不包括超類屬性
4子類實(shí)例.dict.keys()返回子類實(shí)例屬性,不包括類和超類屬性
5dir(類)返回類屬性,包括系統(tǒng)屬性
6dir(實(shí)例)返回實(shí)例屬性,包括類屬性和系統(tǒng)屬性
7dir(子類)返回類屬性,包括超類屬性和系統(tǒng)屬性
8dir(子類實(shí)例)返回子類實(shí)例屬性,包括類、超類、系統(tǒng)屬性

示例

>>> class MySuper:
    s='梯閱線條'
    def m1(self):
        self.data1='MySuper'

>>> class MyClassA(MySuper):
    def __init__(self):
        self.data2='MyClassA'
    
>>> msp1=MySuper()
# 類.__dict__.keys() 返回類屬性
>>> MySuper.__dict__.keys()
dict_keys(['__module__', 's', 'm1', '__dict__', '__weakref__', '__doc__'])
# dir(類) 比 類.__dict__.keys() 多 系統(tǒng)屬性
>>> dir(MySuper)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'm1', 's']
# dir(實(shí)例) 返回類屬性
>>> dir(msp1)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'm1', 's']
# 實(shí)例.__dict__.keys() 不返回類屬性 , 返回實(shí)例屬性 
>>> msp1.__dict__.keys()
dict_keys([])

# dir(類) 返回 超類的屬性 
>>> dir(MyClassA)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'm1', 's']
# 類.__dict__.keys() 不返回超類屬性
>>> MyClassA.__dict__.keys()
dict_keys(['__module__', '__init__', '__doc__'])
# dir(實(shí)例) 返回 超類的屬性 
>>> dir(mca1)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'data2', 'm1', 's']
# 實(shí)例.__dict__.keys() 不返回超類屬性
>>> mca1.__dict__.keys()
dict_keys(['data2'])

1.7 繼承層次例子

通過(guò)__class__ 找到實(shí)例所屬的類,通過(guò) bases 找到超類,從而找到實(shí)例和類的繼承層次。

def classtree(cls,indent):
    print('| '* indent + '|-' + cls.__name__)
    # cls.__bases__
    for supercls in cls.__bases__:
        classtree(supercls,indent+1)

def instancetree(inst):
    print('Tree of {}'.format(inst))
    # inst.__class__ 實(shí)例所屬類
    classtree(inst.__class__,0)
    
def selftest():
    class A:pass
    class B(A):pass
    class C(A):pass
    class D(B,C):pass
    class E:pass
    class F(D,E):pass
    instancetree(B())
    instancetree(F())
    
if __name__ == '__main__':
    selftest()
    
''' 運(yùn)行結(jié)果    
E:\documents\F盤>python classtree.py
Tree of <__main__.selftest.<locals>.B object at 0x01978A30>
|-B
| |-A
| | |-object
Tree of <__main__.selftest.<locals>.F object at 0x01978A30>
|-F
| |-D
| | |-B
| | | |-A
| | | | |-object
| | |-C
| | | |-A
| | | | |-object
| |-E
| | |-object
'''

1.8 doc

python文檔字符串__doc__,值為模塊文件開頭、函數(shù)開頭、類開頭、方法開頭的注釋,python會(huì)自動(dòng)封裝這些注釋,并且保存在__doc__。這些注釋寫在三引號(hào)內(nèi)。

1.8.1 自定義文檔字符串

文檔字符串可以通過(guò)不同位置路徑對(duì)象的__doc__獲取。

不同路徑對(duì)象屬性名(函數(shù)名、類名、方法名)可以通過(guò)dir(模塊)獲取。

模塊:模塊名.doc

函數(shù):模塊名.函數(shù)名.doc

類:模塊名.類名.doc

方法名:模塊名.類名.方法名.doc

示例

'''
模塊文件名:docstr.py
模塊開頭的文檔字符串
'''
S='梯閱線條'
def hellof(name):
    '''
    函數(shù)開頭的文檔字符串
    '''
    print('hello ',name)

class Student:
    '''
    類開頭處的文檔字符串
    '''
    def study(self):
        '''
        方法開頭的文檔字符串
        '''
        pass
    
# 查看不同對(duì)象的__doc__文檔字符串
>>> path=r'E:\documents\F盤'
>>> import os
>>> os.chdir(path)
>>> import docstr
>>> dir(docstr)
['L', 'S', 'Student', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'hellof']
>>> print(docstr.__doc__)

模塊文件名:docstr.py
模塊開頭的文檔字符串
>>> print(docstr.hellof.__doc__)

    函數(shù)開頭的文檔字符串
>>> print(docstr.Student.__doc__)

    類開頭處的文檔字符串
>>> print(docstr.Student.study.__doc__)

        方法開頭的文檔字符串

到此這篇關(guān)于全面理解python命名空間字典的文章就介紹到這了,更多相關(guān)python命名空間字典內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • python實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的示例代碼

    python實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的示例代碼

    這篇文章主要介紹了python實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 利用pandas進(jìn)行大文件計(jì)數(shù)處理的方法

    利用pandas進(jìn)行大文件計(jì)數(shù)處理的方法

    今天小編就為大家分享一篇利用pandas進(jìn)行大文件計(jì)數(shù)處理的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 讓代碼變得更易維護(hù)的7個(gè)Python庫(kù)

    讓代碼變得更易維護(hù)的7個(gè)Python庫(kù)

    今天小編就為大家分享一篇關(guān)于讓代碼變得更易維護(hù)的7個(gè)Python庫(kù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • Python基礎(chǔ)教程之名稱空間以及作用域

    Python基礎(chǔ)教程之名稱空間以及作用域

    變量是擁有匹配對(duì)象的名字(標(biāo)識(shí)符),命名空間是一個(gè)包含了變量名稱們(鍵)和它們各自相應(yīng)的對(duì)象們(值)的字典,下面這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)教程之名稱空間以及作用域的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Python整數(shù)與Numpy數(shù)據(jù)溢出問(wèn)題解決

    Python整數(shù)與Numpy數(shù)據(jù)溢出問(wèn)題解決

    這篇文章主要介紹了Python 的整數(shù)與 Numpy 的數(shù)據(jù)溢出,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python&&GDAL實(shí)現(xiàn)NDVI的計(jì)算方式

    Python&&GDAL實(shí)現(xiàn)NDVI的計(jì)算方式

    今天小編就為大家分享一篇Python&&GDAL實(shí)現(xiàn)NDVI的計(jì)算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • 利用Python代碼制作過(guò)年春聯(lián)

    利用Python代碼制作過(guò)年春聯(lián)

    這篇文章主要介紹了如何利用代碼編寫過(guò)年的春聯(lián),文中一共介紹了兩種方法,一是利用HTML+CSS+JS,二是利用Python,感興趣的可以試一試
    2022-01-01
  • 總結(jié)Python使用過(guò)程中的bug

    總結(jié)Python使用過(guò)程中的bug

    今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著Python使用過(guò)程中的bug展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • 基于python3 OpenCV3實(shí)現(xiàn)靜態(tài)圖片人臉識(shí)別

    基于python3 OpenCV3實(shí)現(xiàn)靜態(tài)圖片人臉識(shí)別

    這篇文章主要為大家詳細(xì)介紹了基于Python3 OpenCV3實(shí)現(xiàn)靜態(tài)圖片人臉識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Python的字符串操作簡(jiǎn)單實(shí)例

    Python的字符串操作簡(jiǎn)單實(shí)例

    這篇文章主要介紹了Python的字符串操作簡(jiǎn)單實(shí)例,字符串有許多種操作方式,本文帶來(lái)幾個(gè)操作實(shí)例,快來(lái)一起看看吧
    2023-04-04

最新評(píng)論