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

Python中的類學(xué)習(xí)筆記

 更新時(shí)間:2014年09月23日 11:55:19   作者:iCode0410  
這篇文章主要介紹了Python中的類學(xué)習(xí)筆記,本文是個(gè)人學(xué)習(xí)總結(jié),用實(shí)例講解了類的定義、訪問(wèn)控制等內(nèi)容,需要的朋友可以參考下

Python使用中面向?qū)ο蟮恼Z(yǔ)言,支持繼承、多態(tài);

定義一個(gè)Person類:

復(fù)制代碼 代碼如下:

>>> class Person:
... def sayHello(self):
... print('hello')
...
>>> Person.sayHello(None)
hello
>>> Person().sayHello()
hello
 
可以修改Person的類方法
復(fù)制代碼 代碼如下:

>>> def hack_sayHello(obj):
... print('...hello')
...
>>>
>>> Person.sayHello = hack_sayHello
>>> Person.sayHello(None)
...hello
>>> Person().sayHello()
...hello
 
>>> sayHello = Person().sayHello
>>> sayHello()
...hello

Person().sayHello也是一個(gè)函數(shù),可以賦值給變量,并可以直接調(diào)用;
復(fù)制代碼 代碼如下:
 
>>> Person.sayHello is Person().sayHello
False
>>> Person.sayHello == Person().sayHello
False
 
Person.sayHello與Person().sayhello并不是同一個(gè)對(duì)象,直覺(jué)上,Person().sayHello關(guān)聯(lián)(綁定)了一個(gè)Person實(shí)例,而Person.sayHello是一個(gè)類方法;
 
self參數(shù)事實(shí)上正是方法和函數(shù)的區(qū)別:方法將它們的第一個(gè)參數(shù)綁定到所屬的實(shí)例上,因此這個(gè)參數(shù)可以不必提供;
復(fù)制代碼 代碼如下:
 
>>> class Person:
... name = 'unkown'
... def sayHello(self):
... print('i\'m ' + name)
...
>>>
>>> Person.sayHello(None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in sayHello
NameError: name 'name' is not defined
>>> p = Person()
>>> p.name = 'wyj'
>>> p.sayHello()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in sayHello
NameError: name 'name' is not defined
 
可見(jiàn),Python在解析變量時(shí),默認(rèn)從local scope/global scope中查找;
復(fù)制代碼 代碼如下:
 
>>> class Person:
... name = 'unkown'
... def sayHello(self):
... print('i\'m ' + self.name)
...
>>>
>>> Person.sayHello(None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in sayHello
AttributeError: 'NoneType' object has no attribute 'name'
>>> p = Person()
>>> p.name = 'wyj'
>>> p.sayHello()
i'm wyj
 
訪問(wèn)成員都要通過(guò)self,假如以包含name屬性的對(duì)象調(diào)用Person.sayHello(obj),是否可以呢?
復(fù)制代碼 代碼如下:

>>> class Cat:
... name = 'huanhuan'
...
>>> Person.sayHello(Cat())
i'm huanhuan
 
可以,Python并不限制必須用相同類的實(shí)例對(duì)象作為參數(shù)調(diào)用類方法(貌似Python的類機(jī)制類似Javascript);

訪問(wèn)控制

Python并不直接支持私有方訪問(wèn),而是要靠程序員自己把握。
 
不過(guò),可以在屬性名稱前加上雙下劃線而給其私有訪問(wèn)能力(對(duì)外不可見(jiàn));

復(fù)制代碼 代碼如下:

>>> class Person:
... def __private_method(self):
... print('private')
... def test(self):
... self.__private_method()
...
>>> Person().test()
private
>>> Person().__private_method()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Person' object has no attribute '__private_method'
 
實(shí)際上,以上下劃線打頭的方法都有一個(gè)_ClassName__methodName的方法
復(fù)制代碼 代碼如下:

>>> Person._Person__private_method
<function Person.__private_method at 0x7fed431a2d90>
 
調(diào)用
復(fù)制代碼 代碼如下:

>>> Person._Person__private_method(None)
private

總之,Python并不能阻止從類外進(jìn)行方法調(diào)用;
 
類屬性以及對(duì)象屬性

首先,可以為類添加屬性,新對(duì)象將得到屬性的一份拷貝

復(fù)制代碼 代碼如下:

>>> Person.age = 3
>>> Person().age
3
>>> Person.age = 4
>>> Person().age
4
>>> p = Person()
>>> Person.age = 31
>>> p.age
31

對(duì)類屬性的修改,反映到了先前生成的對(duì)象的屬性上,這說(shuō)明類屬性和對(duì)象的屬性共享一個(gè)值;

復(fù)制代碼 代碼如下:

>>> p.age = 34
>>> p.age
34
>>> Person.age
31
>>> Person.age = 99
>>> p.age
34

而一旦對(duì)對(duì)象的屬性的修改,對(duì)象屬性就擁有了自己的值,并不會(huì)反映到類屬性上,而對(duì)類屬性的修改,也不再反映到該對(duì)象的屬性上;

這種行為與Javascript類似

相關(guān)文章

  • Python標(biāo)準(zhǔn)庫(kù)之加密模塊詳解

    Python標(biāo)準(zhǔn)庫(kù)之加密模塊詳解

    這篇文章主要為大家詳細(xì)介紹了Python標(biāo)準(zhǔn)庫(kù)中加密模塊的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-07-07
  • Python編程快速上手——Excel表格創(chuàng)建乘法表案例分析

    Python編程快速上手——Excel表格創(chuàng)建乘法表案例分析

    這篇文章主要介紹了Python Excel表格創(chuàng)建乘法表,結(jié)合具體實(shí)例形式分析了Python接受cmd命令操作Excel文件創(chuàng)建乘法表相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2020-02-02
  • Python生成requirements.txt的兩種最新方法

    Python生成requirements.txt的兩種最新方法

    在Python項(xiàng)目開(kāi)發(fā)中requirements.txt文件扮演著至關(guān)重要的角色,它記錄了項(xiàng)目所需的所有依賴包及其精確版本號(hào),這篇文章主要介紹了Python生成requirements.txt的兩種最新方法,需要的朋友可以參考下
    2025-04-04
  • 利用python將xml文件解析成html文件的實(shí)現(xiàn)方法

    利用python將xml文件解析成html文件的實(shí)現(xiàn)方法

    下面小編就為大家分享一篇利用python將xml文件解析成html文件的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Python中enumerate()函數(shù)詳細(xì)分析(附多個(gè)Demo)

    Python中enumerate()函數(shù)詳細(xì)分析(附多個(gè)Demo)

    Python的enumerate()函數(shù)是一個(gè)內(nèi)置函數(shù),主要用于在遍歷循環(huán)中獲取每個(gè)元素的索引以及對(duì)應(yīng)的值,這篇文章主要介紹了Python中enumerate()函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2024-10-10
  • python錯(cuò)誤調(diào)試及單元文檔測(cè)試過(guò)程解析

    python錯(cuò)誤調(diào)試及單元文檔測(cè)試過(guò)程解析

    這篇文章主要介紹了python錯(cuò)誤調(diào)試及單元文檔測(cè)試過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 使用Python實(shí)現(xiàn)計(jì)算DICOM圖像兩點(diǎn)真實(shí)距離

    使用Python實(shí)現(xiàn)計(jì)算DICOM圖像兩點(diǎn)真實(shí)距離

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)計(jì)算DICOM圖像兩點(diǎn)真實(shí)距離,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • python編程webpy框架模板之def with學(xué)習(xí)

    python編程webpy框架模板之def with學(xué)習(xí)

    這篇文章主要為大家介紹了python編程web.py框架模板之def with的學(xué)習(xí)有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Python的psutil模塊詳解

    Python的psutil模塊詳解

    psutil是一個(gè)跨平臺(tái)庫(kù),能夠輕松實(shí)現(xiàn)獲取系統(tǒng)運(yùn)行的進(jìn)程和系統(tǒng)利用率(包括CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等)信息,需要的朋友可以參考下
    2023-05-05
  • python輕松過(guò)濾處理臟話與特殊敏感詞匯

    python輕松過(guò)濾處理臟話與特殊敏感詞匯

    我們開(kāi)發(fā)的系統(tǒng)往往都離不開(kāi)信息的處理,這些信息有的內(nèi)容非常敏感,就需要過(guò)濾掉不容許出現(xiàn),
    2022-07-07

最新評(píng)論

承德市| 郓城县| 廊坊市| 石屏县| 辉县市| 南汇区| 贵港市| 泸溪县| 开阳县| 香格里拉县| 六盘水市| 遂昌县| 砚山县| 公安县| 磐安县| 乌兰浩特市| 泗水县| 彰武县| 深水埗区| 通辽市| 井陉县| 赣州市| 明溪县| 和政县| 乐业县| 留坝县| 咸阳市| 鄯善县| 政和县| 东乡县| 灌南县| 侯马市| 英超| 嫩江县| 修武县| 云梦县| 蕲春县| 靖西县| 灯塔市| 福海县| 波密县|