# 面向对象与面向过程

#   面向过程:以事物流程为中心,核心是“过程”步骤,即,先干什么,后干什么.
#   优点:负责的问题流程化,编写相对简单
#   缺点:可扩展性差

#   面向对象:一切以对象为中心,万事万物皆是对象( )
#   优点: 可扩展性强
#   缺点: 编程的复杂度高于面向过程


# 面向对象
# 如何编写面向对象
 1 # class 表示创建一个类
 2 # Car 类名 类是对事物的定义 归类
 3 class Car:  # 类名首字母大写
 4     pass
 5 
 6 c = Car()  # 通过类来创建对象 把类概念实例化  对象 = 类()
 7 
 8 c.chelu ="圆的" # 属性
 9 c.color ="酷黑"
10 c.pailiang = "5.5"
11 c.pz = "浙A86666"
12 # c.xxx  可理解成  对象的 xx属性/xx参数
13 print(c.pailiang)
14 print(c.color)
15 print(c.chelu)
16 print(c.pz)
17 
18 c1 = Car()  # 新的对象 不同对象是放在不同空间的 类可多次使用
19 c1.pz = "京A66666"
20 c1.pl = "6.6"
21 c1.color = "骚红"
22 c1.suoyouren = "jiang"
23 
24 print(c1.suoyouren)
25 print(c1.color)
26 print(c1.pl)
27 print(c1.pz)
28 # print(c.price) # 没有的属性会报错
29 #  AttributeError: 'Car'   has no attribute 'price'

 

 

# 类的实例化
# 实例化:类名加括号就是实例化,会自动触发__init__函数的运行,可用它来为每个实例定制自己的特征
# self:在实例化时自动将对象/实例本身传给__init__的第一个参数.
 1 class Computer:  # 创建类
 2     # 构造方法 __init__(self) 在创建对象时自动访问这个方法 设置一些初始化的属性信息
 3     def __init__(self,pinpai,price,cpu,neicun): # 谁调用,self就是谁 传参时self自动传 self 自身本身
 4         self.pinpai = pinpai
 5         self.price = price
 6         self.cpu = cpu
 7         self.neicun = neicun
 8 
 9     def playgame(self,game): # 定义方法可以新添参数
10         print("我要打游戏,我要%s"% game)
11         print("我用我的%s电脑,利用很吊的%s来成功%s"%(self.pinpai,self.cpu,game))
12 
13 d = Computer("小米","8999","I7-8750H","16G") # 创建对象 实例化
14 print(d.pinpai)
15 #
16 d1 = Computer("神舟","9999","I7-9700K","32G")
17 print(d1.cpu)
18 #
19 d1.playgame("吃鸡") # 使用 playgame 方法 参数"吃鸡"传给game
# 总结:类与对象的关系:类是对事物的总结.抽象的概念.类用来描述对象.对象是类的
# 实例化的结果.对象能执行哪些方法.都由类来决定.类中定义了什么.对象就拥有什么

 

 

# 练习题
# 思考过程:
# 准备创建类class -> 定义__init__()  self.xxx = xxxx
# 对象能干什么事儿?  方法. def 方法名(self, 参数...)
 1 # 1.创建一个武松.武松可以打老虎,杀嫂子,替天行道
 2 class HaoHan: # 创建类
 3     def __init__(self,mingzi,chenhao,wugong,wuqi):  # 初始化参数
 4         self.mingzi = mingzi
 5         self.chenaho = chenhao
 6         self.wugong = wugong
 7         self.wuqi = wuqi
 8 
 9     def dalaohu(self): # 定义方法
10         print("%s使用%s爆锤老虎"%(self.mingzi,self.wuqi))
11 
12     def shasaozi(self):
13         print("%s怒杀嫂子" % self.mingzi)
14 
15     def titianxingdao(self):
16         print("%s一双%s,走南闯北,替天行道" % (self.mingzi,self.wugong))
17 
18 wusong = HaoHan("武松","行者","王霸拳","拳头")
19 wusong.dalaohu()
20 wusong.shasaozi()
21 wusong.titianxingdao()
22 # 谁调用,self就是谁,可以多次调用
23 likui = HaoHan("李逵","黑旋风","板斧","旋风斩")
24 likui.dalaohu()
25 likui.shasaozi()
26 likui.titianxingdao()
27 
28 # 2.⽤面向对象的思维来模拟LOL里的盖伦上阵杀敌.
29 class Juese:
30     def __init__(self,xingwei,hp,fy):
31         self.xingwei = xingwei
32         self.hp = hp
33         self.fy = fy
34 
35     def yinggang(self,mingzi):
36         print("选%s,%shp%s防御%s就是杠" % (mingzi,self.xingwei,self.hp,self.fy))
37 
38 gailun = Juese("上阵杀敌",5000,200)
39 gailun.yinggang("盖伦")
40 
41 # 3.创建一个和尚类,自由发挥属性和方法
42 class Heshang:
43     def __init__(self,mingzi,wugong,xingwei,simiao,shifu):
44         self.mingzi = mingzi
45         self.wugong = wugong
46         self.xingwei = xingwei
47         self.simiao = simiao
48         self.shifu = shifu
49 
50     def day(self):
51         print("%s师承%s,至%s而来,一身大成%s,%s英勇无敌"%(self.mingzi,self.shifu,self.simiao,self.wugong,self.xingwei))
52 
53 bajie = Heshang("八戒","金刚经","降妖除魔","灵隐寺","玄奘")
54 bajie.day()
55 
56 # 4.模拟用户登录
57 class User: # 类名
58     def __init__(self,username,password): # 初始化
59         self.username = username
60         self.password = password
61 
62     def login(self,use,pas):  # 定义登录方法
63         if use == self.username and pas == self.password:
64             return True
65         else:
66             return False
67 
68 u1 = User("王尼玛","123")  # 对象 u1
69 re = u1.login(input("请输入账号:"),input("请输入密码:")) # 调用方法login
70 print(re)

 

 

# 面向对象与面向过程
 1 # 例子1:要把大象装进冰箱
 2 # 面向过程
 3 def open():
 4     print("开门")
 5 def zhuang():
 6     print("装大象")
 7 def close():
 8     print("关门")
 9 open()
10 zhuang()
11 close()
12 
13 # 面向对象
14 class DaXiang:
15     def __init__(self,open,zhuang,close):
16         self.open = open
17         self.zhuang = zhuang
18         self.close = close
19 dx = DaXiang("开冰箱","装大象","关冰箱")
20 print(dx.open)
21 print(dx.zhuang)
22 print(dx.close)
23 # 如上可看到面向对象很麻烦
24 
25 # 例子2:佩奇大战奥特曼
26 # 面向过程
27 def da_atm(name,age,jn):
28     print("%s,今年%s岁了,使用%s技能疯狂输出奥特曼"%(name,age,jn))
29 def da_bfx(name,age,jn):
30     print("%s,今年%s岁了,使用%s技能疯狂输出蝙蝠侠"%(name,age,jn))
31 def da_zzx(name,age,jn):
32     print("%s,今年%s岁了,使用%s技能疯狂输出蜘蛛侠"%(name,age,jn))
33 
34 da_atm("小猪佩奇",9,"嘴巴嘟嘟")
35 da_bfx("小猪佩奇",9,"嘴巴嘟嘟")
36 da_zzx("小猪佩奇",9,"嘴巴嘟嘟")
37 
38 # 面向对象
39 class Pig:
40     def __init__(self,name,age,jn):
41         self.name = name
42         self.age = age
43         self.jn = jn
44 
45     def da_atm(self):
46         print("%s,今年%s岁了,使用%s技能疯狂输出奥特曼" % (self.name,self.age,self.jn))
47     def da_bfx(self):
48         print("%s,今年%s岁了,使用%s技能疯狂输出蝙蝠侠" % (self.name,self.age,self.jn))
49     def da_zzx(self):
50         print("%s,今年%s岁了,使用%s技能疯狂输出蜘蛛侠" % (self.name,self.age,self.jn))
51 
52 peiqi = Pig("小猪佩奇",9,"嘴巴嘟嘟")
53 peiqi.da_atm()
54 peiqi.da_bfx()
55 peiqi.da_zzx()
56 
57 # 如上案例 面向对象思路更好,增添方法也容易
58 # 所以.用哪种编程思想不是绝对的.得根据需求来完成.
# 函数式编程:简单的基本功能 函数式编程更好用
# 面向对象:如果功能非常复杂的时候. 面向对象
# 面向对象比面向过程复杂
收藏 打印