一、類的概念python
面向對象編程的2個很是重要的概念:類和對象是面向對象編程的核心。編程
在使用對象的過程當中,爲了將具備共同特徵和行爲的一組對象抽象定義,提出了另一個新的概念——類安全
例如:人類,汽車類,鳥類,狗類,都是多個具備相同特徵事物的合集概念。函數
二、對象的概念(萬事萬物皆對象)this
對象是具體事物,具備惟一性,必定能肯定是哪個的就是對象。spa
例如:周杰倫、地球、老王的寶馬、小李的泰迪設計
類(Class) 由3個部分構成指針
狗類的設計code
定義一個類,格式以下:對象
class 類名: 方法列表
舉個例子:定義一個Car類
#定義類
class Car: #方法
def getCarInfo(self): print("這是一輛%s牌汽車"%self.name) def move(self) print("車正在移動")
說明:
經過上面,定義了一個Car類;就比如有車一個張圖紙,那麼接下來就應該把圖紙交給生成工人們去生成了
python中,能夠根據已經定義的類去建立出一個個對象
建立對象的格式爲:
對象名 = 類名()
建立對象demo
#定義類
class Car: def move(self): print("車在奔跑") #建立對象
BMW = Car() #對象調用方法
BMW.move() #給對象添加屬性
BMW.name = "寶馬"
#經過點語法調用對象屬性
print(BMW.name)
運行結果爲:
車在奔跑
寶馬
說明:
在上一面的demo中,咱們已經給BMW這個對象添加了1個屬性name,試想若是再次建立一個對象的話,確定也須要進行添加屬性,顯然這樣作很費事,那麼有沒有辦法可以在建立對象的時候,就順便把車這個對象的屬性給設置呢?
答案就是:_ _init_ _()方法
一、使用方法
class 類名: #初始化方法,用來完成一些默認的設定
def __init__(): pass
二、_ _init_ _()方法的調用
class Car: def __init__(self): self.name = "寶馬"
def move(): print("車在跑") #建立對象
bmw = Car() print("這是一輛%s牌汽車"%bmw.name)
運行結果爲:這是一輛寶馬牌汽車
說明:當建立Car對象後,在沒有調用__init__()方法的前提下,bmw就默認有了name屬性爲寶馬
三、自定義_ _init_ _()方法
class Car: def __init__(self,newName,newColor): self.name = newName self.color = newColor def move(): print("車在跑") #建立對象
bmw = Car("寶馬","黑色") print("這是一輛%s牌汽車"%bmw.name) print("這輛汽車的顏色是%s"%bmw.color)
運行結果爲:
這是一輛寶馬牌汽車
這輛汽車的顏色是黑色
說明:
class Car: def __init__(self,newName,newColor): self.name = newName self.color = newColor def move(): print("車在跑") def __str__(self): msg = "你好,我是一輛%s的%s牌汽車"%(self.color,self.name) return msg #建立對象
bmw = Car("寶馬","黑色") print(bmw)
運行結果爲:你好,我是一輛黑色的寶馬牌汽車
說明:
若是有一個對象,當須要對其進行修改屬性時,有2種方法
爲了更好的保存屬性安全,即不能隨意修改,通常的處理方式爲
1 class Person(object): 2 def __init__(self, name): 3 #以__開頭的屬性表示私有屬性,不容許外部訪問
4 self.__name = name 5
6 def getName(self): 7 return self.__name
8
9 def setName(self,newName): 10 if len(newName)>=5: 11 self.__name = newName 12 else: 13 print("Error:輸入的名字長度不夠") 14
15 xiaoming = Person("Se7eN_HOU") 16 print(xiaoming.__name)
運行結果爲:
Traceback (most recent call last): File "C:\Users\Se7eN_HOU\Desktop\demo.py", line 16, in <module>
print(xiaoming.__name) AttributeError: 'Person' object has no attribute '__name'
修改成以下代碼:
class Person(object): def __init__(self, name): #以__開頭的屬性表示私有屬性,不容許外部訪問
self.__name = name def getName(self): return self.__name
def setName(self,newName): if len(newName)>=5: self.__name = newName else: print("Error:輸入的名字長度不夠") xiaoming = Person("Se7eN") xiaoming.setName("Se7eN_HOU") print(xiaoming.getName()) xiaoming.setName("HOU") print(xiaoming.getName())
運行結果爲:
Se7eN_HOU
Error:輸入的名字長度不夠
Se7eN_HOU
說明:
建立對象後,python解釋器默認調用_ _init_ _()方法;
當刪除一個對象時,python解釋器也會默認調用一個方法,這個方法爲_ _del_ _()方法
class Person(object): #初始化方法,建立對象會被自動調用
def __init__(self, name): print("__init__方法被調用") self.__name = name #析構方法:當對象刪除是會被調用
def __del__(self): print("__del__方法被調用") def getName(self): return self.__name
def setName(self,newName): if len(newName)>=5: self.__name = newName else: print("Error:輸入的名字長度不夠") xiaoming = Person("Se7eN") print("------立刻刪除xiaoming------") del xiaoming laowang = Person("laowang") laowang2 = laowang laowang3 = laowang print("------立刻刪除laowang------") del laowang print("------立刻刪除laowang2------") del laowang2 print("------立刻刪除laowang3------") del laowang3
運行結果爲:
__init__方法被調用
------立刻刪除xiaoming------
__del__方法被調用
__init__方法被調用
------立刻刪除laowang------
------立刻刪除laowang2------
------立刻刪除laowang3------
__del__方法被調用
說明: