1. 構造函數:java
爲何要有構造函數?函數
打一個比方:類的建立就是比如你建立了好了一種格式的房間,你租給上一個住戶的後,裏面會對方不少「垃圾」和不規則的物品擺放。構造函數就是下一個住戶再使用的時候進行物品的初始化擺放,防止下一個用戶再使用的時候會出現沒有初始化物品錯放的錯誤等。this
構造函數的格式:spa
__init__( ):.net
注意:在使用建立對象的時候會自動調用,構造函數用於初始化類實例的狀態。若是不顯式的建立構造函數,默認會自動添加一個構造函數。其實因爲沒有自己都會帶上這個構造函。可是仍是要寫上比較好。code
舉例說明:對象
class Person(object): def __init__(self,name,age,height,weight): print(name,age,height,weight) self.name = name self.age = age self.height = height self.weight = weight def run(self): print("run") def eat(self,food): print("eat " + food) per3 = Person("hanmeimei",20,170,55) print(per3.name,per3.age,per3.height,per3.weight) # hanmeimei 20 170 55 # hanmeimei 20 170 55 per4 = Person("lilei",18,180,80) print(per4.name,per4.age,per4.height,per4.weight) # lilei 18 180 80 # lilei 18 180 80
2. 析構函數:blog
爲何要有析構函數?內存
以前咱們在第一篇關於內存詳細解析的時候說過,在高級的語言相似於C/C++、java等不須要手動的去釋放內存。在這類語言當中有自動的內存管理機制。其實析構函數就是釋放類在調用後的一種內存釋放做用。所以咱們釋放內存經常使用的一共有四種,釋放類的內存,釋放實例化的內存,釋放函數內存,釋放變量內存。析構函數就是釋放類的內存的一種方式,可是咱們有自動化的內存釋放機制,這種方式通常咱們也不太寫。it
格式:
__del__( )
舉例說明:
# 第一種釋放 class Person(object): def __init__(self,name,age,height,weight): self.name = name self.age = age self.height = height self.weight = weight def __del__(self): print("這裏是析構函數") def run(self): print("run") def eat(self,food): print("eat " + food) def say(self): print("Hello! My name is %s, I am %d years old" %(self.name,self.age)) per5 = Person("hanmeimei",20,170,55) # 第二種釋放 del per5 # 對象釋放後就不能在訪問了 # 第三種釋放:在函數裏定義的對象,會在函數結束時自動釋放,這樣能夠用來減小內存空間的浪費。 def func(): perx = Person("aa",1,1,1) func()
3. self說明:
咱們發現,在類的列表中有一個object的父類。在屬性和方法的編寫的時候出現了self的這個東西。這個東西就是一種「自身限制」的做用。解釋以下:
self:表示類的實例,而非類。那個對象調用方法,那麼該方法中的self表明那個對象。
self.__class__:表明類名。
self.表示調用自身類。表示當前實例的引用。意思是:他只能被用在下列類成員的代碼塊中。
self的目的:
用於區分類的成員和本地的變量或參數。
做爲調用方法的實參。
self相似於C# 語言中的this.的意思。
舉例說明:
class Person(object): def __init__(self,name,age,height,weight): # print(name,age,height,weight) self.name = name self.age = age self.height = height self.weight = weight def run(self): print("run") def eat(self,food): print("eat " + food) def say(self): print("Hello! My name is %s, I am %d years old" %(self.name,self.age)) # self不是關鍵字,換成其餘的標識符也是能夠的,可是帥的人通常都用self per = Person("Tom",20,160,80) per.say()
4.cls說明:
Self表示一個具體的實例自己。若是用了staticmethod(靜態方法),那麼飢渴五十這個self,把這個方法當成一個普通使用。
cls表示這個類自己,經常使用用在返回這個類的方法或者屬性的類型和信息信息。
>>> class A(object): def foo1(self): print "Hello",self @staticmethod def foo2(): print "hello" @classmethod def foo3(cls): print "hello",cls >>> a = A() >>> a.foo1() #最多見的調用方式,但與下面的方式相同 Hello <__main__.A object at 0x9f6abec> >>> A.foo1(a) #這裏傳入實例a,至關於普通方法的self Hello <__main__.A object at 0x9f6abec> >>> A.foo2() #這裏,因爲靜態方法沒有參數,故能夠不傳東西 hello >>> A.foo3() #這裏,因爲是類方法,所以,它的第一個參數爲類自己。 hello <class '__main__.A'> >>> A #能夠看到,直接輸入A,與上面那種調用返回一樣的信息。 <class '__main__.A'> --------------------- 做者:daijiguo 來源:CSDN 原文:https://blog.csdn.net/daijiguo/article/details/78499422 版權聲明:本文爲博主原創文章,轉載請附上博文連接!