python心跳的实现_(python)面向对象
函數式編程和面向對象對比
a. round 1 請開發一個消息提醒的功能(郵件/短信/微信)
defemail(em,text):"""發送郵件
:return:"""
print(em,text)defmsg(tel,text):"""發送短信
:return:"""
print(tel,text)defwechat(num,text):"""發送微信
:return:"""
print(num,text)#編寫功能:假設用戶購買課程,然后給alex發送提醒;
if 1==1:
msg('188888888','張進購買了一個學位課')
email('alex@sb.com','張進購買了一個學位課')
wechat('xxxx','張進購買了一個學位課')
函數
classMessage:defemail(self, em, text):"""發送郵件
:return:"""
print(em,text)defmsg(self, tel, text):"""發送短信
:return:"""
print(tel,text)defwechat(self, num, text):"""發送微信
:return:"""
print(num,text)#編寫功能:假設用戶購買課程,然后給alex發送提醒;
if 1==1:
obj=Message()
obj.email('alex@sb.com', '張進購買了一個學位課')
obj.msg('188888888','張進購買了一個學位課')
obj.wechat('xxxx','張進購買了一個學位課')
面向對象
初步對比:
函數:定義簡單/調用簡單
面向對象:定義復雜/調用復雜/ ?好處:歸類,將某些類似的函數寫在一起
總結:
1.函數式編程可能會比面向對象好.
2.python中支持的兩種編程方式
3.面向對象方式格式
定義: ? ?class 類名 定義了一個類
def ?函數名(self) 在類中編寫了一個"方法"
pass
調用:
x1 = 類名() 創建了一個對象/實例化了一個對象
x1.函數名() 通過對象調用其中一個方法
classAccount:deflogin(self):
user= input('請輸入用戶名:')
pwd= input('請輸入密碼:')if user == 'alex' and pwd == 'sb':print('登錄成功')else:print('登錄失敗')
obj=Account()
obj.login()
實例
a. round 2 打印
"""
完成以下功能:
老狗/20歲/男/上山去砍柴
老狗/20歲/男/開車去東北
老狗/20歲/男/喜歡大寶劍
"""
defkc(name,age,gender):
data= "%s,性別%s,今年%s歲,喜歡上山砍柴" %(name,gender,age)print(data)defdb(name,age,gender):
data= "%s,性別%s,今年%s歲,喜歡開車去東北" %(name,gender,age)print(data)defbj(name,age,gender):
data= "%s,性別%s,今年%s歲,喜歡大寶劍" %(name,gender,age)print(data)
kc('老狗',20,'男')
kc('老狗',20,'男')
db('老狗',20,'男')
bj('老狗',20,'男')
函數版本
classLaoGou:def __init__(self,name,age,gender): #特殊的方法,如果 類名() ,則該方法會被自動執行 (構造方法)
self.n1 =name
self.n2=age
self.n3=genderdefkc(self):
data= "%s,性別%s,今年%s歲,喜歡上山砍柴" %(self.n1,self.n3,self.n2)print(data)defdb(self):
data= "%s,性別%s,今年%s歲,喜歡開車去東北" %(self.n1,self.n3,self.n2)print(data)defbj(self):
data= "%s,性別%s,今年%s歲,喜歡大寶劍" %(self.n1,self.n3,self.n2)print(data)
obj= LaoGou('老狗',20,'男')
obj.kc()
obj.db()
obj.bj()
面向對象
總結:
1.構造方法
實例一:
classFoo:def __init__(self,name): 構造方法,目的進行數據初始化.
self.name=name
self.age= 18obj= Foo('侯明魏')
通過構造方法
通過構造方法,可以將數據進行打包,以后使用時,去其中獲取即可.
2.應用
a.將數據封裝到對象中,以供自己在方法中調用
classFileHandler:def __init__(self,file_path):
self.file_path=file_path
self.f= open(self.file_path, 'rb')defread_first(self):#self.f.read()
#...
pass
defread_last(self):#self.f.read()
#...
pass
defread_second(self):#self.f...
#...
passobj= FileHandler('C:/xx/xx.log')
obj.read_first()
obj.read_last()
obj.read_second()
obj.f.close()
封裝
b.將數據封裝到對象中,以供其他函數調用
1 defnew_func(arg):2 arg.k13 arg.k24 arg.k65
6 classFoo:7 def __init__(self,k1,k2,k6):8 self.k1 =k19 self.k2 =k210 self.k6 =k611
12 obj = Foo(111,22,333)13 new_func(obj)
=-=
練習:
1:用戶登錄
2:顯示當前的用戶信息
3:查看當前用戶所有賬單
4:購買姑娘形狀的抱枕
1 classUserInfo:2
3 def __init__(self):4 self.name =None5
6 definfo(self):7 print('當前用戶名稱:%s' %(self.name,))8
9 defaccount(self):10 print('當前用戶%s的賬單是:....' %(self.name,))11
12 defshopping(self):13 print('%s購買了一個人形抱枕' %(self.name,))14
15 deflogin(self):16 user = input('請輸入用戶名:')17 pwd = input('請輸入密碼:')18 if pwd == 'sb':19 self.name =user20 whileTrue:21 print("""
22 1. 查看用戶信息23 2. 查看用戶賬單24 3. 購買抱枕25 """)26 num = int(input('請輸入選擇的序號:'))27 if num == 1:28 self.info()29 elif num ==2:30 self.account()31 elif num == 3:32 self.shopping()33 else:34 print('序號不存在,請重新輸入')35 else:36 print('登錄失敗')37
38 obj =UserInfo()39 obj.login()
實例
面向對象的代碼如何編寫
a.規則
1 classFoo:2
3 def __init__(self,name):4 self.name =name5
6
7 defdetail(self,msg):8 print(self.name,msg)9
10 obj =Foo()11 obj.detail()
規范
b.什么時候寫,如何寫?
方法一:歸類+提取公共值
1 classFile:2 deffile_read(self,file_path):3 pass
4
5 deffile_update(self,file_path):6 pass
7
8 deffile_delete(self,file_path):9 pass
10
11 deffile_add(self,file_path):12 pass
13
14 classExcel:15 defexcel_read(self,file_path):16 pass
17
18 defexcel_update(self,file_path):19 pass
20
21 defexcel_delete(self,file_path):22 pass
23
24 defexcel_add(self,file_path):25 pass
歸類
1 classFile:2 def __init__(self,file_path):3 self.file_path =file_path4
5 deffile_read(self):6 pass
7
8 deffile_update(self):9 pass
10
11 deffile_delete(self):12 pass
13
14 deffile_add(self):15 pass
16
17 classExcel:18 def __init__(self,file_path):19 self.file_path =file_path20
21 defexcel_read(self):22 pass
23
24 defexcel_update(self):25 pass
26
27 defexcel_delete(self):28 pass
29
30 defexcel_add(self):31 pass
32
提取公共值
方法二:在指定類中編寫和當前類的所有相關代碼 + 提取公共值
1 classMessage:2 defemail(self):3 pass
4
5 classPerson:6 def __init__(self,na, gen, age, fig)7 self.name =na8 self.gender =gen9 self.age =age10 self.fight =fig11
12 defgrassland(self):13 self.fight = self.fight - 10
14
15 defpractice(self):16 self.fight = self.fight + 90
17
18 defincest(self):19 self.fight = self.fight - 666
20
21
22 cang = Person('蒼井井', '女', 18, 1000) #創建蒼井井角色
23 dong = Person('東尼木木', '男', 20, 1800) #創建東尼木木角色
24 bo = Person('波多多', '女', 19, 2500) #創建波多多角色
25
26 dong.grassland()
類代碼和公共值
面向對象的三大特性:封裝/繼承/多態
封裝:
將相關的功能封裝到一個類中:
classMessage:def emil(self):pass
def msg(self):pass
def wechat(self):pass
...
將數據封裝到一個對象中:
classMessage:def emil(self):pass
def msg(self):pass
def wechat(self):pass
...
繼承:
classSuperBase:deff3(self):print('f3')class Base(SuperBase): #父類,基類
deff2(self):print('f2')class Foo(Base): #子類,派生類
deff1(self):print('f1')
obj=Foo()
obj.f1()
obj.f2()
obj.f3()#原則:現在自己類中找,么有就去父類
=-=
總結:
1. 繼承編寫
class Foo(父類):
pass
2. 支持多繼承(先找左/再找右)
3. 為什么要有多繼承? 提供代碼重用性
多態:
多種形態或者多種狀態
由于python原聲支持多態,所以沒有特殊性
1 classFoo1:2 deff1(self):3 pass
4
5 classFoo2:6 deff1(self):7 pass
8
9 classFoo3:10 deff1(self):11 pass
12
13
14 deffunc(arg):15 arg.f1()16
17 obj = Foo1() #obj= Foo2() obj = Foo3()
18 func(obj)
python
classSon(list):pass
classSon1(list):pass
#以后傳參時,arg可以是:list類的對象/list任何子類的對象
public void func(list arg){print(arg)
}#obj = list()
#obj = Son()
obj =Son1()
func(obj)
java偽代碼
總結
以上是生活随笔為你收集整理的python心跳的实现_(python)面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: seurat提取表达矩阵_单细胞数据分析
- 下一篇: mysql单库tps_MySQL数据库三