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

全面理解python命名空間字典

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

python命名空間是屬性與對象的一一映射關系。

任何一個屬性通過命名空間都能找到唯一一個與之對應的對象。

詳細點擊《python命名空間基礎知識》。

python的命名空間由字典實現,屬性為鍵,對象為值。通過屬性找到對象。

1.1 dict

__dict__為類和實例的屬性字典—命名空間字典,通過字典找到屬性指向的對象。

實例無本身屬性則為空字典。

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

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

1.2 class

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

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

1.3 class.name

class.__name__獲取實例所屬類的類名。

>>> class MyClass:pass
>>> c1=MyClass()
>>> c1=MyClass()
# __name__ 返回實例所屬類的名字
>>> 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 搜索屬性

類屬性由全部實例共享,實例屬性每個實例相互獨立。

NO屬性描述
1類屬性(1) 類屬性是指類頂層賦值生成的屬性。
(2) 全部實例共享類屬性。
2實例屬性(1)實例屬性是指通過self.屬性名=屬性值,或實例名.屬性名=屬性值,獲取的屬性。
(2)每個實例的實例屬性相互獨立,互不干擾。
(3)實例無屬性時,實例命名空間字典為空。

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

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

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

步驟描述
1通過“實例名.dict”獲取實例屬性。
2若無,則通過“實例名.class”獲取實例所屬類。
3通過“類名.dict”獲取類屬性。
4若無,則通過“類名.base”獲取實例所屬類的直接超類。
5超類重復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 從 實例命名看空間獲取
>>> mca1.data1
'MySuper'
>>> mca1.data2
'MyClassA'

1.6 dir

dir(類或實例),返回類或實例的屬性,包括系統屬性,比__dict__.keys()多。

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

示例

>>> 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() 多 系統屬性
>>> 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(實例) 返回類屬性
>>> 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']
# 實例.__dict__.keys() 不返回類屬性 , 返回實例屬性 
>>> 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(實例) 返回 超類的屬性 
>>> 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']
# 實例.__dict__.keys() 不返回超類屬性
>>> mca1.__dict__.keys()
dict_keys(['data2'])

1.7 繼承層次例子

通過__class__ 找到實例所屬的類,通過 bases 找到超類,從而找到實例和類的繼承層次。

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__ 實例所屬類
    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()
    
''' 運行結果    
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__,值為模塊文件開頭、函數開頭、類開頭、方法開頭的注釋,python會自動封裝這些注釋,并且保存在__doc__。這些注釋寫在三引號內。

1.8.1 自定義文檔字符串

文檔字符串可以通過不同位置路徑對象的__doc__獲取。

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

模塊:模塊名.doc

函數:模塊名.函數名.doc

類:模塊名.類名.doc

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

示例

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

class Student:
    '''
    類開頭處的文檔字符串
    '''
    def study(self):
        '''
        方法開頭的文檔字符串
        '''
        pass
    
# 查看不同對象的__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__)

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

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

        方法開頭的文檔字符串

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

相關文章

  • 在python中獲取div的文本內容并和想定結果進行對比詳解

    在python中獲取div的文本內容并和想定結果進行對比詳解

    今天小編就為大家分享一篇在python中獲取div的文本內容并和想定結果進行對比詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 利用Python連接MySQL超詳細實戰(zhàn)教程

    利用Python連接MySQL超詳細實戰(zhàn)教程

    mysql是關系型數據庫,支持大型的數據庫,可以處理擁有上千萬條記錄的大型數據庫,這篇文章主要介紹了利用Python連接MySQL的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-02-02
  • python3.7+selenium模擬淘寶登錄功能的實現

    python3.7+selenium模擬淘寶登錄功能的實現

    這篇文章主要介紹了python3.7+selenium模擬登錄淘寶功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 超級好用的4個Python命令行可視化庫

    超級好用的4個Python命令行可視化庫

    通常大家都是在自己的電腦上跑程序,直接是可以可視化相應的結果.如果是在服務器上的話,使用終端,是不太方便查看結果. 今天,小F就給大家介紹4個可以在命令行中使用的Python庫. 分別是Bashplotlib、tqdm、PrettyTable、Colorama,需要的朋友可以參考下
    2021-06-06
  • python學習手冊中的python多態(tài)示例代碼

    python學習手冊中的python多態(tài)示例代碼

    多態(tài)是面向對象語言的一個基本特性,多態(tài)意味著變量并不知道引用的對象是什么,根據引用對象的不同表現不同的行為方式,下面使用一個示例學習他的使用方法
    2014-01-01
  • python實現批處理文件

    python實現批處理文件

    這篇文章主要為大家詳細介紹了python實現批處理文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • python使用pyshark庫捕獲數據包的示例詳解

    python使用pyshark庫捕獲數據包的示例詳解

    PyShark是一個基于Python的網絡數據包分析工具庫,它允許用戶捕獲、解碼和分析實時網絡流量,特別是Wi-Fi和TCP/IP協議的數據,所以本文給大家介紹了python使用pyshark庫捕獲數據包的示例,需要的朋友可以參考下
    2024-08-08
  • ansible作為python模塊庫使用的方法實例

    ansible作為python模塊庫使用的方法實例

    ansible是一個python package,是個完全的unpack and play軟件,對客戶端唯一的要求是有ssh有python,并且裝了python-simplejson包,部署上簡單到發(fā)指。下面這篇文章就給大家主要介紹了ansible作為python模塊庫使用的方法實例,需要的朋友可以參考借鑒。
    2017-01-01
  • Pyinstaller打包Scrapy項目的實現步驟

    Pyinstaller打包Scrapy項目的實現步驟

    這篇文章主要介紹了Pyinstaller打包Scrapy項目的實現步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Python獲取類屬性的定義順序的實戰(zhàn)指南

    Python獲取類屬性的定義順序的實戰(zhàn)指南

    掌握類屬性定義順序的獲取技術,可以幫助開發(fā)者構建更??健壯的系統架構??,特別是在需要保持數據一致性和可預測性的應用中,本文將深入探討Python中獲取類屬性定義順序的各種方法,大家可以根據需要進行選擇
    2025-11-11

最新評論

锦屏县| 奉贤区| 沂南县| 偃师市| 开阳县| 通化县| 咸阳市| 北宁市| 乐陵市| 繁峙县| 盐源县| 包头市| 广南县| 克拉玛依市| 崇州市| SHOW| 门头沟区| 衢州市| 郎溪县| 海宁市| 许昌县| 礼泉县| 始兴县| 通海县| 财经| 双鸭山市| 建始县| 嘉鱼县| 河池市| 潞西市| 游戏| 莱西市| 安岳县| 邹平县| 玛纳斯县| 五常市| 辰溪县| 颍上县| 邢台市| 涿州市| 乌拉特中旗|