python之class類和方法的用法詳解
類和方法的概念和實例
- 類(Class):用來描述具有相同的屬性和方法的對象的集合。它定義瞭該集合中每個對象所共有的屬性和方法。對象是類的實例。
- 方法:類中定義的函數。
- 類的構造方法__init__():類有一個名為 init() 的特殊方法(構造方法),該方法在類實例化時會自動調用。
- 實例變量:在類的聲明中,屬性是用變量來表示的,這種變量就稱為實例變量,實例變量就是一個用 self 修飾的變量。
- 實例化:創建一個類的實例,類的具體對象。
- 繼承:即一個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個派生類的對象作為一個基類對象對待。例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模擬"是一個(is-a)"關系(例圖,Dog是一個Animal)。
1.python類:class
python的class(類)相當於一個多個函數組成的傢族,如果在這個Myclass大傢族裡有一個人叫f,假如這個f具有print天氣的作用,那麼如果有一天我需要這個f來print一下今天的天氣,那麼我必須叫他的全名MyClass.f才可以讓他給我print,即在調用他的時候需要帶上他的傢族名稱+他的名稱。
- 屬性:屬性就是在這個類裡的變量。如果變量是物品,那麼不同的屬性就是這個大傢族裡不同的物品
- 方法:方法就是在這個類裡的函數。如果函數是人,那麼不同的方法就是這個大傢族裡不同的人。
MyClass實例:
#Myclass傢族,但是這個傢族隻有一個人f class MyClass: """一個簡單的類實例""" i = 12345 def f(self): return 'hello world' # 實例化類 x = MyClass() # 訪問類的屬性和方法 print("MyClass 類的屬性 i 為:", x.i) #傢族x + 物品名i print("MyClass 類的方法 f 輸出為:", x.f()) #傢族x + 人名f
輸出結果:
2.類的構造方法__init__()
假如init()也是人,但是他是傢族和外界聯絡員,當外界的人想調用自己傢族的人,就必須要先告訴他,所以隻要傢族的人被調用,那麼init()就會被先執行,然後由他去告訴那個被調用的人,執行被調用的。
init()實例:
class Complex: def __init__(self, realpart, imagpart): #必須要有一個self參數, self.r = realpart self.i = imagpart x = Complex(3.0, -4.5) print(x.r, x.i) # 輸出結果:3.0 -4.5
輸出結果:
3.類中方法的參數self
在類的內部,使用 def 關鍵字來定義一個方法,與一般函數定義不同,類方法必須包含參數self, 且為第一個參數,self代表的是類的實例。
- self:類的方法與普通的函數隻有一個特別的區別——必須有一個額外的第一個參數名稱, 按照慣例它的名稱是self。
- 類的實例:是將類應用在實例場景之中,比如有個類裡的函數是f,假如這個f具有print某一時刻的天氣狀況的能力,那麼如果我需要這個f來print一下今天12點的天氣,那麼讓他打印今天12點的天氣這個動作,就是類的實例化,讓類中的函數具有的能力變成真實的動作。
實例化實例:
#類定義 class people: #定義基本屬性 name = '' age = 0 #定義私有屬性,私有屬性在類外部無法直接進行訪問 #定義構造方法 def __init__(self,n,a): self.name = n self.age = a def speak(self): print("%s 說: 我 %d 歲。" %(self.name,self.age)) # 實例化類 p = people('Python',10,30) p.speak()
輸出結果:
4.繼承
假如有兩個傢族,有一個傢族A開始沒落瞭,另一個新興的傢族B想繼承A傢族的物資和傭人,那麼就可以通過如下的方式實現繼承,在這裡,傢族A即是父類,傢族B是子類。在用法上,如果B傢族可以任意使用A傢族的物品和傭人。
class [子類]([父類]):
- BaseClassName(示例中的基類名)必須與派生類定義在一個作用域內。除瞭類,還可以用表達式,基類定義在另一個模塊中時這一點非常有用。
- python還支持多繼承,即可以繼承多個父類。繼承方式和單繼承方式一樣,方式如下:
class [子類]([父類]1, [父類]2, [父類]3):
繼承實例:
#類定義 class people: #定義基本屬性 name = '' age = 0 #定義私有屬性,私有屬性在類外部無法直接進行訪問 __weight = 0 #定義構造方法 def __init__(self,n,a,w): self.name = n self.age = a self.__weight = w def speak(self): print("%s 說: 我 %d 歲。" %(self.name,self.age)) #單繼承示例 class student(people): #student為子類,people為父類 grade = '' def __init__(self,n,a,w,g): #調用父類的構函 people.__init__(self,n,a,w) self.grade = g #覆寫父類的方法 def speak(self): print("%s 說: 我 %d 歲瞭,我在讀 %d 年級"%(self.name,self.age,self.grade)) s = student('ken',10,60,3) s.speak()
運行結果:
5.方法重寫
如果你的父類方法的功能不能滿足你的需求,你可以在子類重寫你父類的方法。即如果B傢族繼承瞭A傢族,但是B傢族有個傭人隻會掃地,於是A傢族給這個人洗腦,讓他啥都不會,然後再教這個傭人洗碗、擦桌子的技能,那麼這個傭人就隻會洗碗和擦桌子瞭。
- super()函數是用於調用父類(超類)的一個方法。
方法重寫實例:
class Parent: # 定義父類 def myMethod(self): print('調用父類方法') class Child(Parent): # 定義子類 def myMethod(self): print('調用子類方法') c = Child() # 子類實例 c.myMethod() # 子類調用重寫方法 super(Child,c).myMethod() #用子類對象調用父類已被覆蓋的方法
輸出結果:
類的特殊屬性與方法
類的私有屬性
- _private_attrs:兩個下劃線開頭,聲明該屬性為私有,不能在類的外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrs。
私有屬性實例:
class JustCounter: __secretCount = 0 # 私有變量 publicCount = 0 # 公開變量 def count(self): self.__secretCount += 1 self.publicCount += 1 print(self.__secretCount) counter = JustCounter() counter.count() counter.count() print(counter.publicCount) print(counter.__secretCount) # 報錯,實例不能訪問私有變量
輸出結果:
類的私有方法
- __private_method:兩個下劃線開頭,聲明該方法為私有方法,隻能在類的內部調用 ,不能在類的外部調用。self.__private_methods。
私有方法實例:
class Site: def __init__(self, name, url): self.name = name # public self.__url = url # private def who(self): print('name : ', self.name) print('url : ', self.__url) def __foo(self): # 私有方法 print('這是私有方法') def foo(self): # 公共方法 print('這是公共方法') self.__foo() x = Site('Python', 'www.irvingao.com') x.who() # 正常輸出 x.foo() # 正常輸出 x.__foo() # 報錯
輸出結果:
到此這篇關於python之class類和方法的用法詳解的文章就介紹到這瞭,更多相關class類和方法的用法內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python基礎之函數和面向對象詳解
- Python3.8官網文檔之類的基礎語法閱讀
- python3中類的重點與難點:類屬性和實例屬性的區別說明
- python語法學習之super(),繼承與派生
- python 類相關概念理解