Python OOP
生活随笔
收集整理的這篇文章主要介紹了
Python OOP
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
面向對象技術簡介
class Employee:'所有員工的基類'empCount = 0 #empCount 變量是一個類變量,它的值將在這個類的所有實例之間共享。你可以在內部類或外部類使用 Employee.empCount 訪問。#類的初始方法,類的構造函數#self 代表類的實例,self 在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數#name salary 實例對象,訪問時需要self.namedef __init__(self, name, salary):self.name = nameself.salary = salaryEmployee.empCount += 1#類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self。def displayCount(self):print("Total Employee %d" % Employee.empCount) #訪問類對象print("say:{0}{1}".format(self.name,self.salary)) #訪問實例對象#創建類的實例 e=Employee("劉德華","酷斃了") #調用實例方法 e.displayCount() #第二個實例 ee=Employee("彭于晏","智商190") ee.displayCount()#屬性操作 e.age = 7 # 添加一個 'age' 屬性 e.age = 8 # 修改 'age' 屬性 del e.age # 刪除 'age' 屬性 print(hasattr(e, 'age')) # 如果存在 'age' 屬性返回 True。 print(setattr(e, 'age', 8)) # 添加屬性 'age' 值為 8 print(getattr(e, 'age')) # 返回 'age' 屬性的值 print(delattr(e, 'age')) # 刪除屬性 'age'print ("類的文檔字符串Employee.__doc__:", Employee.__doc__) print ("類名Employee.__name__:", Employee.__name__) #類的全名是'__main__.className',如果類位于一個導入模塊mymod中,那么className.__module__ 等于 mymod print ("類定義所在的模塊Employee.__module__:", Employee.__module__) print ("類的所有父類構成元素Employee.__bases__:", Employee.__bases__) print ("類的屬性Employee.__dict__:", Employee.__dict__)python對象銷毀(垃圾回收)
- Python 使用了引用計數這一簡單技術來跟蹤和回收垃圾。在 Python 內部記錄著所有使用中的對象各有多少引用。一個內部跟蹤變量,稱為一個引用計數器。
當對象被創建時, 就創建了一個引用計數, 當這個對象不再需要時, 也就是說, 這個對象的引用計數變為0 時, 它被垃圾回收。但是回收不是"立即"的, 由解釋器在適當的時機,將垃圾對象占用的內存空間回收 - 垃圾回收機制不僅針對引用計數為0的對象,同樣也可以處理循環引用的情況。循環引用指的是,兩個對象相互引用,但是沒有其他變量引用他們。這種情況下,僅使用引用計數是不夠的。Python 的垃圾收集器實際上是一個引用計數器和一個循環垃圾收集器。作為引用計數的補充, 垃圾收集器也會留心被分配的總量很大(及未通過引用計數銷毀的那些)的對象。 在這種情況下, 解釋器會暫停下來, 試圖清理所有未引用的循環
- 析構函數 del ,__del__在對象銷毀的時候被調用,當對象不再被使用時,__del__方法運行:
繼承
承語法 class 派生類名(基類名)://... 基類名寫在括號里,基本類是在類定義的時候,在元組之中指明的。
class Parent: # 定義父類parentAttr = 100def __init__(self):print "調用父類構造函數"def parentMethod(self):print '調用父類方法'def setAttr(self, attr):Parent.parentAttr = attrdef getAttr(self):print "父類屬性 :", Parent.parentAttrclass Child(Parent): # 定義子類def __init__(self):print "調用子類構造方法"def childMethod(self):print '調用子類方法 child method'c = Child() # 實例化子類 c.childMethod() # 調用子類的方法 c.parentMethod() # 調用父類方法 c.setAttr(200) # 再次調用父類的方法 c.getAttr() # 再次調用父類的方法你可以繼承多個類:
class C(A, B): # 繼承類 A 和 B
你可以使用issubclass()或者isinstance()方法來檢測。
- issubclass() - 布爾函數判斷一個類是另一個類的子類或者子孫類,語法:issubclass(sub,sup)
- isinstance(obj, Class) 布爾函數如果obj是Class類的實例對象或者是一個Class子類的實例對象則返回true。
方法重寫
class Parent: # 定義父類def myMethod(self):print '調用父類方法'class Child(Parent): # 定義子類def myMethod(self):print '調用子類方法'c = Child() # 子類實例 c.myMethod() # 子類調用重寫方法類屬性與方法
- 私有屬性: __private_attrs:兩個下劃線開頭,聲明該屬性為私有,不能在類的外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrs。
- 在類的內部,使用 def關鍵字可以為類定義一個方法,與一般函數定義不同,類方法必須包含參數 self,且為第一個參數
-類的私有方法: __private_method:兩個下劃線開頭,聲明該方法為私有方法,不能在類地外部調用。在類的內部調用 self.__private_methods
Python不允許實例化的類訪問私有數據,但你可以使用 object._className__attrName 訪問屬性
訪問修飾符
單下劃線、雙下劃線、頭尾雙下劃線說明:
- __foo__: 定義的是特列方法,類似 init() 之類的。
- _foo: 以單下劃線開頭的表示的是 protected 類型的變量,即保護類型只能允許其本身與子類進行訪問,不能用于 from module import *
- __foo: 雙下劃線的表示的是私有類型(private)的變量, 只能是允許這個類本身進行訪問了。
轉載于:https://www.cnblogs.com/shaner/p/7887100.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Python OOP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: yum配置与使用
- 下一篇: @Componet @Resource