概念
屬性:
人類包含很多特征,把這些特征用程序來描述的話,叫做屬性,屬性是名詞,比如年齡、身高、性別、姓名等都叫做屬性,一個(gè)類中可以有多個(gè)屬性
方法:
人類還能做好多事情,把這些功能用程序來描述的話,叫做方法,方法路是動(dòng)詞,比如說話、走路、吃飯等,一個(gè)類中可以有多個(gè)方法
對象:
一個(gè)對象即是一個(gè)類的實(shí)例化后實(shí)例,一個(gè)類必須經(jīng)過實(shí)例化后方可在程序中調(diào)用,一個(gè)類可以實(shí)例化多個(gè)對象,每個(gè)對象亦可以有不同的屬性,就像人類是指所有人,每個(gè)人是指具體的對象,人與人之前有共性,亦有不同
實(shí)例化:
把一個(gè)類轉(zhuǎn)變?yōu)橐粋€(gè)對象的過程就叫實(shí)例化
面向?qū)ο?大特性
Encapsulation 封裝
在類中對數(shù)據(jù)的賦值、內(nèi)部調(diào)用對外部用戶是透明的,這使類變成了一個(gè)膠囊或容器,里面包含著類的數(shù)據(jù)和方法
Inheritance 繼承
一個(gè)類可以派生出子類,在這個(gè)父類里定義的屬性、方法自動(dòng)被子類繼承
Polymorphism 多態(tài)
多態(tài)是面向?qū)ο蟮闹匾匦?簡單點(diǎn)說:“一個(gè)接口,多種實(shí)現(xiàn)”,指一個(gè)基類中派生出了不同的子類,且每個(gè)子類在繼承了同樣的方法名的同時(shí)又對父類的方法做了不同的實(shí)現(xiàn),這就是同一種事物表現(xiàn)出的多種形態(tài)。
多態(tài)是抽象化的一種體現(xiàn),把一系列具體事物的共同點(diǎn)抽象出來, 再通過這個(gè)抽象的事物, 與不同的具體事物進(jìn)行對話。對不同類的對象發(fā)出相同的消息將會(huì)有不同的行為。
一切皆為對象
python中一切皆為對象,且python3中類與類型是一個(gè)概念,類型就是類
類型dict就是類dict
經(jīng)典類與新式類
1.只有在python2中才分新式類和經(jīng)典類,python3中統(tǒng)一都是新式類
2.在python2中,沒有顯式的繼承object類的類,以及該類的子類,都是經(jīng)典類
3.在python2中,顯式地聲明繼承object的類,以及該類的子類,都是新式類
4.在python3中,無論是否繼承object,都默認(rèn)繼承object,即python3中所有類均為新式類
一個(gè)簡單的小案例
class Qiaoning(object):
def ell(self):
name = input('請輸入你的用戶名:')
passwd = input('請輸入你的用戶密碼: ')
if name == 'qiaoning' and passwd == '123':
print('系統(tǒng)登錄成功')
else:
print('系統(tǒng)登錄失敗')
obj = Qiaoning()
obj.ell()
class Qiaoning:
def login(self):
users = str(input('請輸入你的用戶名:'))
password = int(input('請輸入你的密碼:'))
if users == 'qiao' and password == 123:
print('用戶 %s 密碼 %s 登錄成功'%(users,password))
else:
print('用戶 %s 密碼 %s 登錄失敗' % (users, password))
obj = Qiaoning()
obj.login()
函數(shù)版用例
def email(el,txt):
print(el,txt)
def msg(ms,txt):
print(ms,txt)
def wechat(we,txt):
print(we,txt)
if 1==1:
email('qiaoning@qq.com','買票')
msg('1888888888','買票')
wechat('xxxxxxx','買票')
'''
qiaoning@qq.com 買票
1888888888 買票
xxxxxxx 買票
'''
面向?qū)ο笥美?/h3>
class Messages:
def email(self,el, txt):
print(el, txt)
def msg(self,ms, txt):
print(ms, txt)
def wechat(self,we, txt):
print(we, txt)
obj = Messages()
obj.email('qiaoning@qq.com', '買票')
obj.msg('1888888888', '買票')
obj.wechat('xxxxxxx', '買票')
'''
qiaoning@qq.com 買票
1888888888 買票
xxxxxxx 買票
'''
class A:
company_name = '老男孩教育' # 靜態(tài)變量(靜態(tài)字段)
__iphone = '1353333xxxx' # 私有靜態(tài)變量(私有靜態(tài)字段)
def __init__(self,name,age): #特殊方法
self.name = name #對象屬性(普通字段)
self.__age = age # 私有對象屬性(私有普通字段)
def func1(self): # 普通方法
pass
def __func(self): #私有方法
print(666)
@classmethod # 類方法
def class_func(cls):
""" 定義類方法,至少有一個(gè)cls參數(shù) """
print('類方法')
@staticmethod #靜態(tài)方法
def static_func():
""" 定義靜態(tài)方法 ,無默認(rèn)參數(shù)"""
print('靜態(tài)方法')
@property # 屬性
def prop(self):
pass
總結(jié)
對比:
函數(shù): 定義簡單/調(diào)用簡單
面向?qū)ο螅?定義復(fù)雜/調(diào)用復(fù)雜, 好處:歸類 將類似的功能放到一起
總結(jié):
1.函數(shù)式編程可能比面向?qū)ο笫礁?br>
2.python支持兩個(gè)編程方式
面向?qū)ο笳Z法格式
class 類名: 定義一個(gè)類
def 函數(shù)名(self): 在類中定義了一個(gè)方法
pass
obj = 類名() 創(chuàng)建了一個(gè)對象/實(shí)例化了一個(gè)對象
obj.函數(shù)名() 通過對象調(diào)用其中一個(gè)方法
class Messages:
def email(self,el, txt):
print(el, txt)
def msg(self,ms, txt):
print(ms, txt)
def wechat(self,we, txt):
print(we, txt)
obj = Messages()
obj.email('qiaoning@qq.com', '買票')
obj.msg('1888888888', '買票')
obj.wechat('xxxxxxx', '買票')
'''
qiaoning@qq.com 買票
1888888888 買票
xxxxxxx 買票
'''
class A:
company_name = '老男孩教育' # 靜態(tài)變量(靜態(tài)字段)
__iphone = '1353333xxxx' # 私有靜態(tài)變量(私有靜態(tài)字段)
def __init__(self,name,age): #特殊方法
self.name = name #對象屬性(普通字段)
self.__age = age # 私有對象屬性(私有普通字段)
def func1(self): # 普通方法
pass
def __func(self): #私有方法
print(666)
@classmethod # 類方法
def class_func(cls):
""" 定義類方法,至少有一個(gè)cls參數(shù) """
print('類方法')
@staticmethod #靜態(tài)方法
def static_func():
""" 定義靜態(tài)方法 ,無默認(rèn)參數(shù)"""
print('靜態(tài)方法')
@property # 屬性
def prop(self):
pass
對比:
函數(shù): 定義簡單/調(diào)用簡單
面向?qū)ο螅?定義復(fù)雜/調(diào)用復(fù)雜, 好處:歸類 將類似的功能放到一起
總結(jié):
1.函數(shù)式編程可能比面向?qū)ο笫礁?br>
2.python支持兩個(gè)編程方式
class 類名: 定義一個(gè)類
def 函數(shù)名(self): 在類中定義了一個(gè)方法
pass
obj = 類名() 創(chuàng)建了一個(gè)對象/實(shí)例化了一個(gè)對象
obj.函數(shù)名() 通過對象調(diào)用其中一個(gè)方法