編程思想
面向過程編程:算法和邏輯
函數式編程:函數
面向對象編程:類和對象
1.類和對象
類 -- 就是擁有相同功能和相同屬性的對象的集合(抽象的)
對象 -- 類的實例(具體的)
2.類的聲明 -- 確定這個類的共同的屬性和功能是什么
1)語法:
class 類名:
類的說明文檔
類的內容
2)說明
class - 關鍵字
類名 - 要求:標識符旅挤,不能是關鍵字
規(guī)范:a. 首字母大寫歹叮,采用駝峰式命名(多個單詞相連试读,每個單詞的首字母大寫) b.見名知意 c. 不能使用系統(tǒng)提供的函數名或者類名
類的說明文檔 -- 要求和函數說明文檔一樣
類的內容 -- 主要包含屬性和方法(方法就是聲明在類中函數)
3)聲明對象
對象 = 類() -- 同一個類可以創(chuàng)建多個對象
4)類中的方法分為3種:類方法徽鼎,對象方法腥沽,靜態(tài)方法
3.對象方法
1)怎么聲明:直接聲明(聲明前面不需要加裝飾器)在類中的函數就是對象方法
2)特點:自帶一個self參數谦炒,用對象調用對象方法的時候self不用傳參或悲,系統(tǒng)會自動將當前對象傳給self,它可以做到誰調用就指向誰。
3)怎么調用:'對象.對象方法()'的形式來調用
4.構造方法(函數) -- 函數名和類的名字一樣的函數就是構造函數:類名()-- 調用構造方法
注意:在pyhon中聲明類的時候系統(tǒng)會自動為這個類創(chuàng)建一個函數怪与,函數的作用是創(chuàng)建對象(用來實例化對象)夺刑。
1)執(zhí)行過程:在內存中開辟空間創(chuàng)建對象,用創(chuàng)建好的對象去調用'_ _ init_ _'方法分别,返回對象在內存中的地址遍愿。(對象的實際作用為接收構造方法調用魔法方法所獲得的內存中的地址)
5._ _ init_ _方法(函數) -- 魔法方法(都會自動調用)
聲明在類中用來對對象進行初始化的方法;(當對象一創(chuàng)建出來耘斩,這個方法就會自動被調用)
創(chuàng)建對象的時候構造方法需不需要傳參沼填,需要傳幾個參數,都看魔法方法需要幾個括授。
6.類中的屬性(屬性就是聲明在類中的變量)
類中的屬性分為:字段和對象屬性坞笙。
1)字段:
a.怎么聲明:聲明在類的里面函數的外面就是字段
b.怎么使用:以‘類.字段’的形式去使用
c.什么時候用:屬性的值不會因為對象的不同而不同,這樣的屬性就聲明成類的字段
2)對象屬性(重要)
a.怎么聲明:以‘self.屬性名=值’的形式聲明在init方法中
b.怎么使用:通過對象去使用
c.什么時候用:屬性的值會因為對象的不同而不同荚虚,這樣的屬性就聲明成類的對象屬性
練習:
class Dog:
def __init__(self, name, dog_type, gender='公'):
self.name = name
self.age = 10
self.gender = gender
self.dog_type = dog_type
def Dog_1(self):
print(self.name, self.age, self.dog_type, self.gender)
def jiaohuan(self):
print(self.name+'汪汪汪')
a = Dog(name='旺財', dog_type='金毛')
a.Dog_1()
a.jiaohuan()
7.對象屬性的增刪改查
Python中類的對象中的對象屬性支持增刪改查
1)查(獲取對象屬性的值)
方法1:對象.屬性
方法2:getatter(對象薛夜,‘屬性名’)/getatter(對象,‘屬性名’,默認值)
方法3:對象.getattribute('屬性名')
2)增/改
方法1:對象.屬性=值(屬性存在就修改版述,不存在就增加)
方法2:setattr(對象梯澜,'屬性名',值)
3)刪除
方法1:del 對象.屬性
方法2:delattr(對象渴析,'屬性名')
8.slots魔法
作用:通過給slots字段賦值來約束當前類的對象有哪些對象屬性(確定類中只能有哪些屬性)
因此如果添加屬性多了就會報錯腊徙,但是可以少简十。
class Dog:
slots = ('name', 'age') -- 后面的對象方法就不能使用其他屬性,只能使用括號里面的撬腾。
def init(self):
pass