函数式编程和面向对象对比

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)面向对象相关推荐

  1. python多进程编程实例_[python] Python多进程编程技术实例分析

    这篇文章主要介绍了Python多进程编程技术,包括了线程.队列.同步等概念及相关的技巧总结,需要的朋友可以参考下 本文以实例形式分析了Python多进程编程技术,有助于进一步Python程序设计技巧. ...

  2. python查看excel编码格式_[Python]实现处理读写xlsx xls excel文件格式(含中文处理方法)...

    最近有个需求要处理excel 格式的数据,数据量比较大.用传统的语言似乎不太好处理,于是改用python实现,这里记录一下实现过程. 首先,科普一下xlsx xls的excel文件区别是什么. xls ...

  3. python快速爬虫视频_“python怎么快速爬虫视频“python 爬网页视频教程

    用python怎样爬网页 # coding:utf8 import cookielib import urllib2 url = "http://blog.uouo123.com" ...

  4. python朋友圈刷屏_“Python太火了!请救救Java!”9万程序员刷屏朋友圈 !

    没想到有生之年,笔者能观察到"霸主陨落"的过程,继PLPY4月榜单官宣,Python躺赢,再度"夺"冠,实力甩下Java和C后,近期,Stack Overflo ...

  5. python 打包 小文件_[Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件

    1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...

  6. python shell如何打开_“python shell怎么打开“python shell启动教程

    python shell怎么打开 1.简介:如何在python中运行shell(bash命令) 2.工具/原料:python库:os.py 3.方法:import os command = 'date ...

  7. python输出文本居中_#python PIL ImageDraw text 文本居中#

    python pip pil有什么东西 你所问的问题实是属1.先参考[教程]Python中的内置的和方的模块搞懂PIL是属于第三方Python模块2.再参考:[待完善][总结]Python安装第三方的 ...

  8. python判断素数程序_使用面向对象方法检查素数的Python程序

    python判断素数程序 This program will check whether a given number is Prime or Not, in this program we will ...

  9. python心跳包原理_心跳包机制设计详解 转载

    存在下面两种情形: 情形一:一个客户端连接服务器以后,如果长期没有和服务器有数据来往,可能会被防火墙程序关闭连接,有时候我们并不想要被关闭连接.例如,对于一个即时通讯软件,如果服务器没有消息时,我们确 ...

最新文章

  1. Redis + Tomcat + Nginx 集群实现 Session 共享
  2. 推荐开发工具系列之--FireGestures(火狐手势命令)
  3. stm8s003 8K空间不够用,出现报错,修改stvd参数进行最优化
  4. VTK:隐式布尔值demo用法实战
  5. 监控java_Java应用程序监控JavaMelody
  6. 写在2009年的开始
  7. python 模块路径搜索_Python模块搜索路径问题
  8. 解决window.open被拦截问题
  9. mysql+基本代码_PHP+MySQL扎实基本功十句话_php
  10. python爬虫之模拟登陆csdn
  11. cfe刷机教程 斐讯k3_PHICOMM 斐讯 K3 路由器 刷机教程
  12. 费马大定理四分之一解决
  13. 2020年高效搬砖必备的IDEA插件(附安装包)
  14. Python10行代码实现模拟百度搜索
  15. 机器学习(7)——安然数据集分析
  16. 华为交换机导入配置_华为交换机通用配置方式方法
  17. xampp php搭建失败,ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败),thinkphpxampp...
  18. Odb文件(Abaqus)数据结构的一些思考
  19. Oracle字符集讨论(转)
  20. 人工神经网络是符号主义,神经网络的符号表达式

热门文章

  1. 整理了7道Python函数的练习题,希望对你学习函数有帮助
  2. python中,如何将多行进行输出,同时将行尾的换行符去掉
  3. Python引用模块和查找模块路径
  4. java中字段值重复校验,Java中一些常见的字段校验
  5. idea2020 需要热部署吗_小微制造企业需要部署MES系统吗?
  6. 拉格朗日乘数法(一种寻找变量受一个或多个条件所限制的多元函数的极值的方法)
  7. python sklearn.svm.SVC() 使用方法
  8. Future和CompletableFuture的区别和对比,以及Future主要的四个缺点——不能回调会阻塞、批量任务处理彼此依赖会阻塞、不能多个任务级联执行、得不到最先完成的任务
  9. Make it Divisible by 25 思维
  10. div中定义局部变量_说说 Go 中的变量(附粗制滥造面试题)