路飞学城Python-Day18

【1.编程范式】
1.面向过程编程
2.面向对象编程

【2.面向过程编程】
面向过程:核心就是过程  
什么是过程?
过程指的是解决问题的步骤,先做什么,在作什么,面向过程就像是设计一个流水线,是一种机械式的思维方式,这种思维方式的基本思想就是把一个大的问题不断细化为各种子问题,然后不断细化,知道细化到能够在很小的范围里编写,然后逐个击破
面向过程的优缺点?
优点:复杂的问题分解为一步步小问题,复杂问题流程化进而简单化
缺点: 对于写程序,需要扩展代码,对于面向过程就需要不断修改,可扩展性不强,修改某一个功能,其他的功能都要去查,牵一发而动全身
设计一个用户登录界面
def login():
'''
用户输入账号密码
:return:
'''
username = input('>>>').strip()
pwd = input('>>>').strip()
return {
"username": username,
"pwd": pwd
}
 
def check(user_info):
'''
检查用户输入合法性
:return:
'''
is_valid = True
if len(user_info['username']) == 0:
print('用户名不能为空')
is_valid = False
if len(user_info['pwd'])<6:
print('密码不能少于6位')
is_valid = False
return {
'is_valid': is_valid,
'user_info': user_info
}
 
def register(check_info):
'''
完成注册
:return:
'''
if check_info['is_valid']:
import json
with open('db.json','w',encoding='utf-8') as f:
json.dump(check_info['user_info'],f)
 
def main():
'''
主函数代码块
:return:
'''
user_info = login()
check_info = check(user_info)
register(check_info)
 
if __name__ == '__main__':
main()
用户登录界面增加需求
def login():#增加需求需要逐行检查
'''
用户输入账号密码
:return:
'''
username = input('>>>').strip()
pwd = input('>>>').strip()
email = input('>>>').strip()
return {
"username": username,
"pwd": pwd,
"email": email,
}
 
def check(user_info):
'''
检查用户输入合法性
:return:
'''
is_valid = True
if len(user_info['username']) == 0:
print('用户名不能为空')
is_valid = False
if len(user_info['pwd'])<6:
print('密码不能少于6位')
is_valid = False
import re
if not re.search(r'@.*?\.com$',user_info['email']):
print('邮箱格式不合法')
is_valid =False
return {
'is_valid': is_valid,
'user_info': user_info
}
 
def register(check_info):
'''
完成注册
:return:
'''
if check_info['is_valid']:
import json
with open('db.json','w',encoding='utf-8') as f:
json.dump(check_info['user_info'],f)
 
def main():
'''
主函数代码块
:return:
'''
user_info = login()
check_info = check(user_info)
register(check_info)
 
if __name__ == '__main__':
main()
 

【3.面向对象编程】
面向对象:核心就是对象,理解对象必须站在上帝的视角,任何事物都视为对象
什么是对象?
对象就是特征与技能的组合
总结:面向过程就是设计流水线,面向对象就是设计角色和角色的特征和技能
面向对象的优点和缺点
优点:可扩展性强,面向对象只能解决扩展性,但是软件开发里可扩展性只是一部分,掌握面向对象是开发的一部分
缺点:简单的问题会变的复杂化,编程的复杂度高,容易出现设计的问题
应用场景:用户需求经常变化的场景,互联网应用、游戏、企业内部的应用(办公系统)等经常发生需求变更的场景
 

【4.定义类与实例化对象】
什么是类?
分类就是从事物里找相似的特征,类就是一系列对象的相似特征与技能的结合体
强调,站在不同角度得到的分类是不一样的
先有类还是先有对象?
1.在现实世界,先存在事物,然后根据事物的特征判断类,所以现实里是先有对象再有类
2.在程序中,想要使用对象,必须是先有类(模板),然后才有对象,这样才能根据类去实例化对象(生产出一个对象)
站在路飞学院的角度,大家都是学生
学生对象:
1.panda
     特征:
        学校:Luffy
        名字:panda
        性别:男
    技能:
        学习
        吃饭
        睡觉
2.zombie
    特征:学校:Luffy
             名字:zombie
              性别:男
    技能:
             学习
             吃饭
             睡觉
3.小哥
    特征:学校:Luffy
             名字:二师兄
              性别:女
    技能:
             学习
             吃饭
             睡觉
总结相同的类
    相同的特征:学校:Luffy
    相同的技能:吃饭、学习、睡觉
下面来定义类
# 先定义类
class LuffyStudent:
school = 'luffy'
 
def learn(self):
print('学习使我快乐')
 
def eat(self):
print('吃饭使我幸福')
 
def sleep(self):
print('睡觉让我开心')
# 后产生对象
stu1 = LuffyStudent()
stu2 = LuffyStudent()
stu3 = LuffyStudent()
print(stu1, stu2, stu3)
定义好类以后,特征直接就写在类的开始的内部,技能就需要写成函数的形式
 

【5.如何使用类】
当定义函数的时候,不调用是不会运行函数的,函数体的代码只有在调用的时候执行,一旦执行了函数就会产生一个局部名称空间,会把函数产生的类调用出去
定义类,在类的定义阶段就会内部的代码就会运行
产生的名称空间都是一个字典的形式
# 查看类的名称空间
print(LuffyStudent.__dict__)
Python不限制类在内部加其他的代码的,比如打印操作
类的两个属性
1.针对类内部定义的变量,称为数据属性 
2.针对类内部定义的函数,称为函数属性    
Pyhton提供了专门的属性访问语法>>类名+.+函数属性
# 查看类的名称空间
# print(LuffyStudent.__dict__)
print(LuffyStudent.school)#print(LuffyStudent.__dict__['school'])
print(LuffyStudent.learn)#print(LuffyStudent.__dict__['learn'])
# 增
LuffyStudent.county = 'China'
print(LuffyStudent.county)
# 删除
del LuffyStudent.county
print(LuffyStudent.county)


# 改
LuffyStudent.school = 'Luffycity1123'
print(LuffyStudent.school)
【小结】
1.调用类-类名+.+函数属性
2.类的增删改查(都坐下,基本操作)

【6.如何使用对象】
如何为每个对象定制各自各有的特征(__init__方法的引出)
# 为对象定制自己独有的特征
class LuffyStudent:
school = 'luffy'
def __init__(self, name, sex, age):
self.Name = name
self.Sex = sex
self.Age = age
 
def learn(self):
print('学习使我快乐')
 
def eat(self):
print('吃饭使我幸福')
 
def sleep(self):
print('睡觉让我开心')
 
# 后产生对象
# 有init的方法的时候,调用类的时候(实例化的步骤)
# 1.先产生一个空对象
# 2.触发一个__init__方法(类的函数属性)
stu1 = LuffyStudent('三炮', '女', 28)
stu2 = LuffyStudent('大锤', '男', 29)
stu3 = LuffyStudent('二狗', '女', 28)
print(stu1.Name, stu2.Name, stu3.Name)
print(stu1.__dict__)
 
# 查
# print(stu1.Name, stu2.Name, stu3.Name)
# print(stu1.__dict__)
# 改
# stu1.Name = '山炮'
# print(stu1.Name)
# 删除
# del stu1.Name
# print(stu1.Name)
# 增加
# stu1.Hobby = '篮球'
# print(stu1.Hobby)

【7.属性查找与绑定方法】

【8.一切皆对象】

【9.面向对象可扩展性总结】

【10.小练习1】

【11.小练习2】

【12.继承与重用性】

【13.派生】

【14.继承的实现原理】

【15.在子类中重用父类的方法和属性】

【16.组合】

【17.抽象类与归一化】

【18.多态与多态性】

【19.封装之如何隐藏属性】

【20.封装的意义】

【21.封装与可扩展性】

【22.property的使用】

【23.绑定方法与非绑定方法介绍】

【24.绑定方法与非绑定方法】

【25.反射】

【26.内置方法介绍】

【27.元类介绍】

【28.自定义元类控制类的创建】

【29.自定义元类控制类的实例化行为】

【30.自定义元类控制类的实例化行为的应用】

【31.面向对象的软件开发与作业介绍】

【32.什么是异常处理】

【32.try...except...详细方法】

 

猜你喜欢

转载自www.cnblogs.com/pandaboy1123/p/9315874.html