日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python OOP

發布時間:2025/6/15 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 Point:def __init__( self, x=0, y=0):self.x = xself.y = ydef __del__(self):class_name = self.__class__.__name__print class_name, "銷毀"pt1 = Point() pt2 = pt1 pt3 = pt1 print id(pt1), id(pt2), id(pt3) # 打印對象的id del pt1 del pt2 del pt3

繼承

承語法 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。