這篇文章將為大家詳細講解有關Python面向對象如何編程,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
概述
很多人接觸Python,都是從爬蟲開始,其實很多語言都可以做爬蟲,只是Python相對其他語言來說,更加簡單而已。但是Python并不止于爬蟲,在人工智能,科學計算等方面的應用更加廣泛。古人云:萬丈高樓平地起,要想有長足的發展,打好基礎很重要,本文主要講解Python的面向對象相關知識,僅供學習分享使用,如有不足之處,還請指正。
面向對象的特征
類:用來描述相同事物的特征的集合,如:Person 類,表示人,具有人的屬性和特征。
對象:通過類定義的具體的實例,如:zhangsan 表示一個具體的人。
繼承:是指派生類繼承基類的方法和屬性,并具有自己屬性和特征,如:Man是Person的子類。
封裝:隱藏數據和實現細節,提供對外訪問方法。
多態:一個基類,可以有多個派生類,可以有不同的形態。
抽象:拋開細節,只關注本質特征的過程。
以上是面向對象的基本特征,那么Python在面向對象方面是如何做的呢?
創建類
如下所示:
class Employee:
"""員工類"""
emp_count = 0 # 變量是一個類變量,它的值將在這個類的所有實例之間共享
def __init__(self, name, salary):
"""初始化"""
self.name = name
self.salary = salary
Employee.emp_count += 1
def display_count(self):
"""顯示數量"""
print('Total Employee =', Employee.emp_count)
def display_employee(self):
"""顯示信息"""
print('name =', self.name, ', salary = ', self.salary)
def prt(self):
"""打印自己"""
print(self)
print(self.__class__)
def __del__(self):
"""析構函數"""
print(self, '被釋放了')創建對象
Python創建對象,不需要new關鍵字,類似于函數的調用,和Java及.Net不同。如下所示:
'創建第一個對象'
emp = Employee('Jack', 20)
emp.display_count()
emp.display_employee()
emp.prt()動態添加與刪除對象屬性
對象的屬性可以動態添加,這點與編譯型語言不同,如下所示:
emp.age = 17 # 添加一個 'age' 屬性 emp.age = 28 # 修改 'age' 屬性 del emp.age # 刪除 'age' 屬性
也可以通過Python的內置方法來添加和獲取屬性,如下所示:
print(getattr(emp, 'name')) # 獲取屬性 print(hasattr(emp, 'age')) # 是否包含屬性 setattr(emp, 'age', 18) # 設置屬性和值 print(hasattr(emp, 'age')) # 是否包含屬性 print(getattr(emp, 'age')) # 獲取屬性 delattr(emp, 'age') # 刪除屬性 print(hasattr(emp, 'age')) # 是否包含屬性
Python也有內置類的一些屬性,如下所示:
# 內置對象
print("Employee.__doc__:", Employee.__doc__)
print("Employee.__name__:", Employee.__name__)
print("Employee.__module__:", Employee.__module__)
print("Employee.__bases__:", Employee.__bases__)
print("Employee.__dict__:", Employee.__dict__)類的屬性與方法
如下所示:
class JustCounter:
"""類描述"""
__secretCount = 0 # 類的私有變量
publicCount = 0 # 公開變量
def count(self):
self.__secretCount += 1
self.publicCount += 1
print('私有變量:', self.__secretCount)Python不允許實例化的類訪問私有數據,但你可以使用 object._className__attrName( 對象名._類名__私有屬性名 )訪問屬性,如下所示:
print(counter._JustCounter__secretCount)
類的繼承
面向對象的編程帶來的主要好處之一是代碼的重用,實現這種重用的方法之一是通過繼承機制。通過繼承創建的新類稱為子類或派生類,被繼承的類稱為基類、父類或超類。
如下所示:Parent表示一個父類,擁有自己的屬性和方法。
class Parent:
"""定義父類"""
parentAttr = 100
def __init__(self):
print('調用父類的構造函數')
def parentMethod(self):
print('調用父類方法')
def setAttr(self, attr):
Parent.parentAttr = attr
def getAttr(self):
print('父類屬性:', Parent.parentAttr)
def myMethod(self):
print('我是父類的MyMethod')Child表示一個子類,繼承自Parent,如下所示:
class Child(Parent):
"""定義子類"""
def __init__(self):
print('調用子類的構造方法')
def childMethod(self):
print('調用子類方法')
def myMethod(self):
"""重寫Overrides父類方法"""
print('我是子類的MyMethod')
def __str__(self):
"""重寫方法,適合人閱讀"""
return 'str方法返回'子類的實例化
如下所示:
c = Child() # 實例化子類對象 c.childMethod() # 調用子類方法 c.parentMethod() # 調用父類方法 c.setAttr(200) # 再次調用父類方法,設置屬性 c.getAttr() # 再次調用父類方法 獲取屬性 c.myMethod() # 調用的是子類的MyMethod
可以通過內置函數,判斷子類與類的關系,如下所示:
print(issubclass(Child, Parent)) # 判斷是否是對應的父子關系 print(isinstance(c, Child)) # 判斷是否是實例對象 print(isinstance(c, Parent)) # 判斷是否是實例對象
關于Python面向對象如何編程就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。