面向对象Object Oriented
概述
面向过程
- 分析出解决问题的步骤,然后逐步实现。
例如:婚礼筹办
– 发请柬(选照片、措词、制作)
– 宴席(场地、找厨师、准备桌椅餐具、计划菜品、购买食材)
– 婚礼仪式(定婚礼仪式流程、请主持人) - 公式:程序 = 算法 + 数据结构
- 优点:所有环节、细节自己掌控。
- 缺点:考虑所有细节,工作量大。
面向对象
- 找出解决问题的人,然后分配职责。
例如:婚礼筹办
– 发请柬:找摄影公司(拍照片、制作请柬)
– 宴席:找酒店(告诉对方标准、数量、挑选菜品)
– 婚礼仪式:找婚庆公司(对方提供司仪、制定流程、提供设备、帮助执行) - 公式:程序 = 对象 + 交互
- 优点
(1) 思想层面:
– 可模拟现实情景,更接近于人类思维。
– 有利于梳理归纳、分析解决问题。
(2) 技术层面:
– 高复用:对重复的代码进行封装,提高开发效率。
– 高扩展:增加新的功能,不修改以前的代码。
– 高维护:代码可读性好,逻辑清晰,结构规整。 - 缺点:学习曲线陡峭。
类和对象
- 类:一个抽象的概念,即生活中的”类别”。
- 对象:类的具体实例,即归属于某个类别的”个体”。
- 类是创建对象的”模板”。
– 数据成员:名词类型的状态。
– 方法成员:动词类型的行为。
"""
类和对象
现实事物 -抽象化-> 类 -实例化-> 对象
"""
class Wife:
"""
抽象的老婆
"""
# 数据:姓名、颜值、钱....
def __init__(self, name, face_score, money):
self.name = name
self.face_score = face_score
self.money = money
# 方法(函数):玩...
def play(self):
print(self.name, "在玩耍")
jg = Wife("金刚",6,5000)
jg.play()
语法
定义类
-
代码
class 类名:
“””文档说明”””
def init(self,参数列表):
self.实例变量 = 参数
方法成员 -
说明
– 类名所有单词首字母大写.
– init 也叫构造函数,创建对象时被调用,也可以省略。
– self 变量绑定的是被创建的对象,名称可以随意。
"""
创建1个狗类
数据:爱称,年龄,颜色,品种
行为:吃、坐下
创建2个狗对象,调用相应的方法
画出代码内存图
"""
class Dog:
"""
狗
"""
def __init__(self, name, age=0, color="", breed=""):
self.pet_name = name
self.age = age
self.color = color
self.breed = breed
def eat(self):
print(self.pet_name, "在吃")
def sit(self):
print(self.pet_name, "坐下")
mx = Dog("米咻", 4, "黄", "拉布拉多")
hm = Dog("黑米", 3, "黑", "拉布拉多")
mx.sit()
hm.sit()
# 练习1:
mx = Dog("米咻", 4, "黄", "拉布拉多")
d01 = mx
d01.pet_name = "咻咻"
mx.age = 5
print(d01.pet_name)
print(d01.age)
print(mx.pet_name)
print(mx.age)
# 练习2:
def func01(p1,p2):
p1 = Dog("小白", 5)
p2.pet_name = "小黑"
p2.age = 6
mx = Dog("米咻", 4)
hm = Dog("黑米", 3)
func01(mx,hm)
print(mx.pet_name,mx.age)#?
print(hm.pet_name,hm.age)#"小黑" 6
class Wife:
def __init__(self, name, face_score, money):
self.name = name
self.face_score = face_score
self.money = money
def print_self(self):
print("%s--%d--%d" % (self.name, self.face_score, self.money))
w01 = Wife("建宁", 86, 999999)
list_wifes = [
w01,
Wife("双儿", 95, 5000),
Wife("苏荃", 98, 10000),
Wife("阿珂", 100, 6000),
Wife("铁锤", 80, 0),
]
# 练习1:定义函数,在老婆列表中查找双儿对象
# 测试:调用双儿对象的print_self方法
def find01():
for item in list_wifes:
if item.name == "双儿2":
return item
# 测试:
result = find01()
# 如果找到了
if result:
result.print_self()
# 练习2:定义函数,在老婆列表中查找所有老婆的姓名
# 测试:打印列表
def find02():
# list_result = []
# for item in list_wifes:
# list_result.append(item.name)
# return list_result
return [item.name for item in list_wifes]
print(find02())
来源:CSDN
作者:Ghy1?
链接:https://blog.csdn.net/Guoh9y1/article/details/103929423