当前位置: 代码迷 >> 综合 >> day23 面向过程编程
  详细解决方案

day23 面向过程编程

热度:2   发布时间:2024-02-06 11:18:00.0

“”"

面向过程编程

核心是过程二字,过程是解决问题的步骤,即先干啥再干啥后干啥
基于该思想写程序就是在设计一条条的流水线优点:复杂的问题流程化、进而简单化
缺点:扩展性差

面向对象编程

核心是对象二字,对象是一个用来盛放数据与功能的容器
基于该思想写程序就是在整合程序优点:可扩展性强
缺点:编程的复杂度高

“”"

def choose_course():print("====>")
#{"name":"egn","age":18,"choose":choose_course}

1.类与对象

1、如何基于面向对象的思想写程序
例1
学生的数据

stu_name = "egon"
stu_age = 18
stu_gender = "male"

学生的功能

def choose(name, age, gender):print('%s:%s:%s 正在选课' % (name, age, gender))choose(stu_name,stu_age,stu_gender)

例2:基于对象式的思想进行改写

def choose(stu_self):print('%s:%s:%s 正在选课' % (stu_self["stu_name"], stu_self["stu_age"],stu_self["stu_gender"],))stu_obj = {"stu_name": "egon","stu_age": 18,"stu_gender": "male","choose":choose
}print(stu_obj["stu_name"])
stu_obj["choose"](stu_obj)

python提供专门的语法来更漂亮地实现面向对象编程,什么语法???

‘’’

学生对象1数据:名字 = "冯疯子"年龄 = 18性别 = "female"学生对象2数据:名字 = "郭靖"年龄 = 19性别 = "male"学生对象3数据:名字 = "大雕"年龄 = 200性别 = "male"学生的类相同的数据学校 = "oldboy"相同的功能选课

‘’’

类体代码会在类定义阶段立刻执行,然后将产生的名字都丢到类的名称空间中

class Student:# 相同的数据school = "oldboy"# 相同的功能def choose(self):print("正在选课")# print('====>')stu_obj1=Student()
stu_obj2=Student()
stu_obj3=Student()stu_obj1.name = "冯疯子"  # stu1_obj1.__dict__["name"] = "冯疯子"
stu_obj1.age = 18
stu_obj1.gender = "female"stu_obj2.name = "郭靖"
stu_obj2.age = 19
stu_obj2.gender = "male"stu_obj3.name = "大雕"
stu_obj3.age = 200
stu_obj3.gender = "male"print(stu_obj1.name)stu_obj1.school = "xxx"print(stu_obj1.school)print(Student.__dict__)
print(stu_obj1.__dict__)
print(stu_obj2.__dict__)
print(stu_obj3.__dict__)

例1

class Student:school = "oldboy"def choose(self):print("正在选课")
stu_obj1=Student()
stu_obj2=Student()
stu_obj3=Student()stu_obj1.name = "冯疯子"
stu_obj1.age = 18
stu_obj1.gender = "female"stu_obj2.name = "郭靖"
stu_obj2.age = 19
stu_obj2.gender = "male"stu_obj3.name = "大雕"
stu_obj3.age = 200
stu_obj3.gender = "male"

例2:

class Student:school = "oldboy"def choose(self):print("正在选课")stu_obj1 = Student()
stu_obj2 = Student()
stu_obj3 = Student()def init(obj, x, y, z):obj.name = xobj.age = yobj.gender = zinit(stu_obj1, "冯疯子", 18, "female")
init(stu_obj2, "郭靖", 19, "male")
init(stu_obj3, "大雕", 200, "male")

例2:

class Student:school = "oldboy"# 空对象def __init__(obj, x, y, z):obj.name = xobj.age = yobj.gender = z# return None # 只能返回Nonedef choose(self):print("正在选课")

调用类:

1、创建一个空对象与类相关
2、把空对象、"冯疯子", 18, "female"一起传给__init__方法,完成对象的初始化
3、赋值符号把初始化好的对象的内存地址绑定变量名stu_obj1
stu_obj1 = Student("冯疯子", 18, "female")
stu_obj2 = Student("郭靖", 19, "male")
stu_obj3 = Student("大雕", 200, "male")
print(Student.__dict__)
print(stu_obj1.__dict__)

优先级
先从对象的字典里找,没有,再去类的字典中找

class Student:school = "oldboy"def __init__(obj, x, y, z):obj.name = xobj.age = yobj.gender = zdef choose(self):print("%s 正在选课" %self.name)stu_obj1 = Student("冯疯子", 18, "female")
stu_obj2 = Student("郭靖", 19, "male")
stu_obj3 = Student("大雕", 200, "male")

1、类中定义的数据是直接共享给所有对象使用的

print(id(stu_obj1.school))
print(id(stu_obj2.school))
print(id(stu_obj3.school))
print(id(Student.school))Student.school="xxx"
print(stu_obj1.school)
print(stu_obj2.school)
print(stu_obj3.school)print(Student.choose)
print(stu_obj1.choose)
print(stu_obj2.choose)
print(stu_obj3.choose)

2、类中定义的函数是绑定给所有对象用的,绑定给谁就应该由哪个对象来调用
对象.绑定方法()会把对象当作第一个参数传入
类.函数()就是一个函数的玩法,没有自动传参的效果

Student.choose(123123123)
stu_obj3.choose()
stu_obj2.choose()
stu_obj1.choose()