在學習物件導向之前,我們用函式來封裝我們的功能,當我們要使用時,就呼叫函式來實現我們的需求。現在我們學習了物件導向的知識,知道了類和物件,其實函式式程式設計和物件導向程式設計都可以減少重複**,不過物件導向可以對函式進行分類和封裝,使**可讀性好,易擴充套件。那麼我們什麼時候用到物件導向程式設計呢?我們先了解一些內容。
物件導向的程式設計其實就是: 類 + 物件
什麼是類,什麼是物件?
class person(object): # person 就是類類:可以理解為他是乙個模板,比如人們在說「人」這個名詞的時候,沒人知道這個「人」具體是指那個人!def __init__(self, name):
self.name = name
p = person('bigberg') # p 就是物件
物件: 物件是乙個實際的物體,他有自己的屬性和特徵、行為。比如說 韓梅梅這樣乙個具體的人。
我們以乙個資料庫連線作為例子
# 連線資料庫下面我們用物件導向的方法來實現一下:def connection(host, username, password, prort, dbname):
# 連線資料庫 host, username, password, port, dbname
pass
# 關閉連線
def close_db():
pass
exit
# 備份資料庫
def dump_func(host, username, password, prort, dbname):
connection(host, username, password, prort, dbname)
# 備份操作 host, username, password, prort, dbname
pass
close_db
# 建立資料庫
def create_db(host, username, password, prort, dbname):
connection(host, username, password, prort, dbname)
# 建立操作
pass
close_db
# 我們以函式式的方式來實現,當然可以了。可是我們在實現具體功能的時候,都要做一次連線和關閉操作
class db_func(object):我們還是以上例來做說明,在函式式程式設計中,每乙個函式在執行的時候都需要傳入相同的幾個引數,即:def __init__(self, host, username, password, port, dbname):
self.host = host
....
def connection(self):
# 連線操作
pass
def close(self):
# 關閉操作
pass
def dump_func(self):
# 備份操作
pass
def create_db(self):
# 建立操作
pass
obj = db_func('ip','user','111111','3306','dbname')
# 連線
obj.connection()
# 備份
obj.dump_func()
# 建立
obj.create_db()
#關閉obj.close
# 在這個事例中我們只要在開始時連線資料庫,在離開時關閉資料庫,中間的過程我們可以做很多其他的操作,但是都不需要重複呼叫連線和關閉方法
dump_func(host, username, password, port, dbname)我們去類裡面呼叫方法的時候就不要傳入引數了麼?確實不需要了,python物件導向的最主要特定就是封裝。create_db(host, username, password, port, dbname)
# 每次操作都需要寫一遍
obj = db_func('ip','user','111111','3306','dbname') 在例項化的時候我們已經把這些引數傳給類了,把它封裝到了self中。
如圖:
在類的物件當中,不僅儲存著這個物件的引數,還有乙個隱藏的引數叫做「類物件指標」,他的作用就是告訴物件,去**找方法。
如上圖的類中每個方法都有乙個self,意思是:obj呼叫就等於 def dump_func(obj),由於實參是儲存在obj這個物件當中的,所以我們每次呼叫類中的方法時,
就沒有必要再傳一大推引數了。
看完上面的例子就的想到:如果在一些方法裡共同使用了一組變數,如果這時候使用函式式程式設計,每次呼叫方法的時候都的傳這些引數!
這時候就要想到使用物件導向:把這些變數封裝到物件中,每次呼叫的時候直接傳這個物件即可!
class person(object):我們現在建立乙個角色的時候:country = 'cn' # 定義乙個公有屬性
def __init__(self, name, age, gender, province, job):
self.name = name # 定義成員屬性
self.age = age
self.gender = gender
self.province = province
self.job = job
def talk(self): # 定義方法
print('person is talking.....')
def walk(self):
print('peron is walking...')
def eat(self):
print('person is eating....')
obj = person('stack', 22, 'm', 'zj', 'engineer')
如果我們每建立乙個人物型別,比較學生、教師等等,每次都有重新寫一大堆同樣的內容,是不是很麻煩的樣子?
c 物件導向程式設計 物件導向
什麼是物件導向 是對現實世界理解和抽象的方法。物件導向程式設計的特點 易維護,易擴充套件,靈活性好,重用 類 對事物的抽象定義,即事物具有的共同特徵和行為。物件 即對類進行例項 類是抽象的,物件是具體的 類的定義 語法 訪問修飾符 class 類名類的成員 包括字段,屬性,方法,常量,事件和索引器等...
物件導向程式設計
物件導向程式設計 抽象 封裝 繼承 多型 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因。開放封閉原則 軟體實體應該可以擴充套件,但是不可修改。所有的設計模式都是對不同的可變性進行封裝,從而使系統在不同的角度上達到開發封閉原則。依賴倒轉原則 a 高層不應該依賴低層,兩個都應該依賴抽象。b ...
物件導向程式設計
class team def init self self.name tampa bay buccaneers bucs team print bucs.name tampa bay buccaneers 當呼叫team 函式時,會自動呼叫init函式,self是自動傳入到init中的引數,它指向當...