day28面向对象

本文介绍了面向过程和面向对象编程的基本概念,包括类的定义、对象的产生、属性查找顺序,以及它们的优缺点。通过实例阐述了面向过程如何处理简单问题和面向对象如何支持扩展性。
摘要由CSDN通过智能技术生成

今日内容概要

  • 面向过程编程

  • 面向对象编程

  • 类的定义和对象的产生

  • 定制对象自己独有的属性

  • 属性的查找顺序(类属性、对象属性)

  • 课堂练习题

今日内容详细(超级重要)

面向过程编程
首先,在编程中,面向过程和面向对象是编程的两大编程思想,分别是:面向过程和面向对象,二不是一门新的技术栈.
​
# 之前我们写的ATM项目都是面向过程的
"""什么是面向过程:"""
面向过程中核心是过程二字,过程就是先干什么、在干什么、最后干什么,就是机械式的思维方式
​
案例:
    # 把大象放冰箱需要几步?
        1. 打开冰箱门
        2. 把大象放进冰箱
        3. 关上冰箱门
   生活中很多很多的例子都是面向过程的
​
优点:复杂的问题简单化、进而流程化
缺点:扩展性差,牵一发而动全身
应用场景: 一般用在对扩展性要求比较差的情况
​
使用面向过程写一个注册的案例来体会面向过程的优缺点、
1. 先让用户输入用户名和密码
2. 验证参数
3. 直接把数据写入文件中
面向对象编程
面向对象它也是一种编程的思想,不是一门新的技术栈
​
面向对象中对象是核心,必须搞明白什么是对象
    """在Python中一切皆对象!"""
​
对象是什么?
    在生活中:
        对象就是'特征'与'技能'的集合体
     在程序中:
        对象就是盛放'数据属性'和'功能'的容器
        
优点:扩展性强
缺点:简单的问题复杂化了
​
举例:学生选课系统
      系列中有哪些角色:
        学生
        老师
        管理员
        选课功能
        ...

类的定义和对象的产生

对象:是特征与技能的结合体
​
"""站在不同的角度,分出来的类不一样"""
类:一系列相似的特征和相似的技能的结合体
​
问题来了?
    到底是先有对象还是先有类?
        1. 生活中
            先有人,在有人类,那就是先有对象,在有类
        2. 程序中:
            """一定是先有类,然后调用类,产生对象!!!!!!!"""
            
    
    
"""
专业语法:
    类的定义
    def index():pass
​
    class Student():
        pass
"""
​
## 函数中得括号一定不能省略
# def index():
#     pass
# class Stundent():
#     pass
​
​
# class Student():
#     pass
​
"""
1. 关键字使用class来声明
2. class后面写的是类名,类名的命名:一般情况下遵循变量的命名规范即可,类名一般首字母都要大写,(小写也行,但是不推荐)
3. 如果你的类名比较长,推荐使用驼峰法,并且是大驼峰
4. 类名后面的小括号不能省略
"""
# def index():
#     print(123)
​
​
### 只是定义类
class Student():
    school = 'SH'  # 类属性,其实就是变量吗?
​
    def choose_course(stu_dict, course):
        stu_dict['courses'].append(course)
        print("%s选课成功:%s" % (stu_dict['name'], stu_dict['courses']))
​
    print(123)
"""
定义类发生了哪些事情?
    1. 类一旦定义完成,会立马执行类体代码
    2. 会产生类的名称空间,其实就是一个大字典,然后把类中得名字都丢到类的名称空间去
    3. 把类的名称空间绑定给 类名.__dict__中
"""
​
# 如何查看类的名称空间?
print(Student.__dict__)
​
# 如何产生对象?
# 调用类产生对象
stu = Student()
print(stu)
​
# 如何查看对象的名称空间
print(stu.__dict__) # {} 默认情况下调用类会得到一个空对象,其实就是一个空字典
​
"""调用类的过程也是实例化的过程,得到的对象也称为是一个实例"""

定制对象自己独有的属性

默认情况下,调用类产生一个对象,它是一个空对象,没有任何的数据
因此,我们需要给每一个对象添加数据
​
### 版本3:
class Student():
    school = 'SH'  # 类属性,其实就是变量吗?
​
    """它有特殊的含义, 在类里面必须叫__init__,然后调用类的时候才会自动触发执行"""
​
    ## 类里面一定要有这个方法吗? 不一定,也就是说,你如果需要提前定制对象的属性,你就写这个方法, 如果不需要,就不用写
    def __init__(self, name, age, gender, course=None):
        if course is None:
            course = []
        self.name = name  # stu.__dict__['name'] = 'kevin'
        self.age = age  # stu.__dict__['age'] = 18
        self.gender = gender  # stu.__dict__['gender'] = 'male'
        self.courses = course  # stu.__dict__['courses'] = []
   
    ## 函数写在类里面就称为是方法
    def choose_course(stu_dict, course):
        stu_dict['courses'].append(course)
        print("%s选课成功:%s" % (stu_dict['name'], stu_dict['courses']))
​
### 版本2
"""在调用类的时候,会自定调用类里面的__init__方法"""
​
"""调用类的时候有特殊的功能,它会把对象自己当成第一个参数传给__init__方法"""
# stu = Student('kevin', 19, 'male') # stu = Student(stu, 'kevin', 19, 'male')
# # stu1 = Student()
#
# stu1 = Student('jerry', 20, 'female')

属性的查找顺序

有类属性、对象自己的属性
1. 显示类属性的查找
class Student():
    school = 'SH'
​
stu = Student()
​
### 1. 类属性的查找
# 查
# print(Student.__dict__['school'])
print(Student.school)
​
# 增加
Student.x = 'xxx'
Student.z = 666
print(Student.__dict__)
​
# 改
Student.school = 'BJ'
print(Student.__dict__)
​
# 删除
del Student.school
print(Student.__dict__)
​
2. 对象自己的属性查找
​
###### 对象的增删改查
stu = Student('kevin', 19, 'male')
​
# 1. 查
print(stu.name)
print(stu.age)
print(stu.gender)
# print(stu.x)
print(stu.school) # SH  #### 如果你使用的是点语法,那么,对象查找属性的时候,先从对象自己的名称空间中查找,如果找不到,就去产生这个对象的类中查找
​
"""如果你使用的__dict__取值,只能够取到对象自己名称空间中得属性,不会去类中查找"""
# print(stu.__dict__['school']) # SH  #### 如果你使用的是点语法,那么,对象查找属性的时候,先从对象自己的名称空间中查找,如果找不到,就去产生这个对象的类中查找
print(stu.__dict__)
​
## 增加
stu.x = 666
# stu1.x = 999
​
​
## 改
stu.x = 888
​
## 删除
# del stu.x
del stu.school
print(stu.__dict__)

课堂练习

定义一个类,产生一堆对象,然后定义一个计数器,记录产生了多少个对象
class Student():
    school = 'SH'
    count=0
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
        self.count+=1 # self是对象自己
        #这里应用用类属性
        Student.count += 1
​
​
stu = Student('kevin', 19, 'male')
stu1 = Student('kevin1', 19, 'male')
stu2 = Student('kevin2', 19, 'male')
stu3 = Student('kevin3', 19, 'male')
stu4 = Student('kevin4', 19, 'male')
print(Student.count)
print(stu.count)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值