python面向對象編程pdf,python筆記02_面向對象編程和面向對象高級編程

 2023-10-20 阅读 27 评论 0

摘要:面向對象編程 變量名類似__xxx__的,也就是以雙下劃線開頭,并且以雙下劃線結尾的,是特殊變量,特殊變量是可以直接訪問的,不是private變量,所以,不能用__name__、__score__這樣的變量名。 有些時候,你會看到以一個下劃

面向對象編程

變量名類似__xxx__的,也就是以雙下劃線開頭,并且以雙下劃線結尾的,是特殊變量,特殊變量是可以直接訪問的,不是private變量,所以,不能用__name__、__score__這樣的變量名。
有些時候,你會看到以一個下劃線開頭的實例變量名,比如_name,這樣的實例變量外部是可以訪問的,但是,按照約定俗成的規定,當你看到這樣的變量時,意思就是,“雖然我可以被訪問,但是,請把我視為私有變量,不要隨意訪問”。
但是強烈建議你不要這么干,因為不同版本的Python解釋器可能會把__name改成不同的變量名。
總的來說就是,Python本身沒有任何機制阻止你干壞事,一切全靠自覺。
表面上看,外部代碼“成功”地設置了__name變量,但實際上這個__name變量和class內部的__name變量不是一個變量!內部的__name變量已經被Python解釋器自動改成了_Student__name,而外部代碼給bart新增了一個__name變量.

python面向對象編程pdf、type,isinstance
isinstance([1, 2, 3], (list, tuple))
hasattr(obj, 'x') # 有屬性'x'嗎?
setattr(obj, 'y', 19) # 設置一個屬性'y'

面向對象高級編程

s.name?= 'Michael' # 動態給實例綁定一個屬性
from types import MethodType
s.set_age = MethodType(set_age, s) # 給實例綁定一個方法
Student.set_score = set_score

class Student(object):  __slots__ = ('name', 'age') # 用tuple定義允許綁定的屬性名稱  
__slots__定義的屬性僅對當前類實例起作用,對繼承的子類是不起作用的:  Python內置的@property裝飾器就是負責把一個方法變成屬性調用的
@property
def score(self):return self._score@score.setter
def score(self, value):

Python面向過程、多重繼承

__str__  
__repr__()  
__iter__  
__next__(self):  
__getitem__  
__getitem__()傳入的參數可能是一個int,也可能是一個切片對象slice  
負數作處理  
如果把對象看成dict,__getitem__()的參數也可能是一個可以作key的object,例如str。  
與之對應的是__setitem__()方法,把對象視作list或dict來對集合賦值。最后,還有一個__delitem__()方法,用于刪除某個元素。  
__getattr__  
__call__  
>>> s = Student('Michael')  
>>> s() # self參數不要傳入  
My name is Michael.  type()  
>>> Hello = type('Hello', (object,), dict(hello=fn)) # 創建Hello class  
>>> h = Hello()  
>>> h.hello()  
metaclass是Python面向對象里最難理解,也是最難使用的魔術代碼。正常情況下,你不會碰到需要使用metaclass的情況,所以,以下內容看不懂也沒關系,因為基本上你不會用到。  錯誤,調試,單元測試,文檔測試  

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/150752.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息