26面向对象与类

编程思想

1.面向过程编程
将程序的执行流程化 即分步操作 分步的过程中解决问题
eg:注册、登录、结算购物车...
"""注册:第一步获取用户名 第二步比对用户名数据 ..."""
"""结算:第一步获取购物车数据 第二步计算钱数 ..."""
过程可以理解成是流水线 面向过程编程可以理解成是在创建一条流水线

2面向对象编程

核心就是‘对象’二字

对象是一个‘容器’数据与功能整合到一起

凡是符合上述描述的事物都可以称之为对象!!!

“”“仔细想想会发现,python中一切皆对象”“

"""
面向过程与面向对象两者没有优劣之分 具体要结合实际情况
甚至很多时候两者是混合在一起的!!! 思想占据的比例不同而已
"""

类与对象的概念

对象:数据与功能的结合体
类:即类别、种类 相当于诸多对象公有的特征(数据、功能)!!!(类其实也算对象)

”“现实生活中:
    人                对象

    一群人         人类”“

类与对象的创建

"""
在代码编程中是先有类才能有对象
"""
# 先定义类 后产生对象
# 学生类
class Student:
    # 学生类公共的数据
    school = '清华大学'
    # 学生类公共的功能
    def choose_course(self):
        print('学生选课功能')
"""类体代码无需调用就会执行 产生类的名称空间"""
"""
语法结构
class 类名:
    类体代码
1.class是定义类的关键字
2.类名类似于函数名 但是首字母推荐大写 用于区分
3.类体代码就是存放对象公共数据和功能的地方
数据: 变量名 = 变量值
功能: 函数
"""
# 查看名称空间的方法>>>:__dict__
# print(Student.__dict__) # 返回值是一个字典
# print(Student.__dict__['school']) # 获取类中的属性
# print(Student.__dict__['choose_course']) # 获取类中的属性
"""类获取数据和功能有一个简便的方式>>>:句点符"""
print(Student.school)
print(Student.choose_course)


"""如何产生对象:类名加括号"""
obj1 = Student() # 类名加括号就是在产生一个对象
obj2 = Student()
# print(obj1.__dict__, obj2.__dict__) # {} {}
# print(obj1.school) # 清华大学
# print(obj2.school) # 清华大学
Student.school = '北京大学' # Student.__dict__['school'] = '北京大学' 修改名字与值的对应关系
print(obj1.school) # 北京大学
print(obj2.school) # 北京大学

对象的实例化

# 学生类
class Student:
    def __init__(self, name, age, gender):
        '''该方法就一个功能>>>:给对象添加独有的数据'''
        self.name = name # obj.__dict__['name'] = name
        self.age = age # obj.__dict__['age'] = age
        self.gender = gender # obj.__dict__['gender'] = gender

    # 学生类公共的数据
    school = '清华大学'

    # 学生类公共的功能
    def choose_course(self):
        print('学生选课功能')

obj1 = Student()  # 目前对象没有自己独有的属性

print(obj1.__dict__)  # 大白话就是给字典添加键值对

'''方案1:逐步给对象添加独有的数据'''

# obj1.__dict__['name'] = 'jason'    # obj1.name = 'jason'
# obj1.__dict__['age'] = 18             # obj1.age = 18
# obj1.__dict__['gender'] = 'male'  # obj1.gender = 'male'

# print(obj1.name)  # jason

'''方案2:将冗余的添加步骤封装成函数'''(由于每次建立新对象都要写一遍很麻烦)

# def init(obj,name,age,gender):
# obj.name = name # obj.__dict__['name'] = name
# obj.age = age # obj.__dict__['age'] = age
# obj.gender = gender # obj.__dict__['gender'] = gender
# init(obj1,'jason',18,'male')
# print(obj1.name)

'''方案3:简单的封装成函数没有提现出面向对象整合的精髓>>>:将函数写到类中去'''
# obj1 = Student()  # 目前对象没有自己独有的属性
# Student.set_info(obj1,'jason',18,'male')  (这里如果不是set_info,而是init就会简洁很多)
# print(obj1.name) # jason

'''方案4:类中针对给对象创建独有数据的函数名 专门定义了一个固定的方法'''(init)
# obj1 = Student('jason', 18, 'male')
# obj2 = Student('kevin', 28, 'female')

"""
类中的__init__方法会在类产生对象的时候自动执行
类产生对象的具体步骤
1.先创建一个没有独有数据的空对象 {}
2.将空对象和类括号内传入的数据一并交给__init__执行
         __init__的第一个参数就是对象本身
              __init__(obj,name,age,gender)
3.将创建好的对象自动返回
给你提供这种方式能够减少代码的编写

ps:针对括号内第一个形参self其实就是一个普通的变量名而已
只不过该变量名将来专门接收对象的 所以给它起了个固定的名字叫self
"""

绑定方法

"""
类中定义的函数默认都是绑定给对象使用的
对象来调 会自动将对象当做第一个参数传入
"""
class Student:
     school = '清华大学'
     # __init__方法不要自己去调用
    def __init__(self, name, age):
        self.name = name
        self.age = age

 

 

     def func(self):

        print('%s正在调用func方法'%self.name)

 

    def index(self):
        print('%s正在调用index方法'%self.name)

 

 

obj1 = Student('jason', 18)
# print(obj1)
obj2 = Student('kevin', 28)
# 类调用类中函数(init) 有几个参数就需要传几个参数
# Student.func(123,222)
# 对象调用类中函数 会将当前调用的对象当做第一个参数自动传入
# obj1.func()
# print(obj1.func)
'''所以应该能理解为什么类中所有的函数第一个参数都是self'''

posted @   半糖+奶茶  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示