话不多说,上代码,看结果。
print('1、基本理论#############################################')
print('1.1、 面向过程、面向对象##################################')
# 万物皆对象
# 面向过程、面向对象
# 都是一种解决问题的思路(思想)
# 面向过程 在解决问题的时候,关注的是解决问题的每一个的过程(步骤)
# 面向对象 在解决问题的时候,关注的是解决问题所需要的对象.
# 对比
# 面向对象和面向过程都是解决问题的一种方式(思想) 面向对象本身是对面向过程的封装.
# 面向过程编程最重要的是什么? 按照步骤划分 把一个任务,分解成具体的每一个步骤
# 面向对象编程最重要的什么? 按照功对象能进行划分 找到对象, 确定对象属性和行为
# 如何从面向过程编程的思想,过渡到面向对象编程?
# 1. 一样的,列举出一个任务的具体实现步骤
# 2. 试图分离这些实现步骤中的功能代码块
# 3. 将这些功能代码块,划分到某一个对象中
# 4. 根据这个对象以及对应的行为,抽象出对应的类
print('1.2、 什么是类###########################################')
# 类
# 某一个具体对象特征的抽象
# 根据抽象的类,生产具体的对象
# 类的组成 名称 属性 方法
# 以上属性和方法,都是抽象的概念
# 在产生对象之后,对象才拥有具体的属性值,和方法实现
# 对象和类的关系 对象 抽象 类 实例化 对象
print('2、面向对象在Python中的实践##############################')
print('2.1、创建类##############################')
# 如何定义一个类?
# class 类名:
# pass
class XiongChuMo:
pass
# 根据类创建对象
bear = XiongChuMo()
# 执行流程
# 1. 类的定义
# 2. 根据类,创建出一个对象
# 3. 将对象的唯一标识返回
print('2.2、属性相关##############################')
print('2.2.1、属性和变量的区别及判定依据?###################')
# 区别 概念 访问权限
# 概念
# 变量是“可以改变的量值”
# 属性是“属于某个对象的特性”
# 访问权限
# 变量:根据不同的位置,存在不同的访问权限 全局变量 局部变量
# 属性:只能通过对象来进行访问 所以,必须先找到对象 对象也是通过变量名来引用;而既然是变量,也有对应的访问权限
# 判定依据 是否存在宿主
print('2.2.2、对象属性###################')
# 怎样让一个对象拥有一些属性?(增)
# 直接通过对象,动态添加 对象.属性 = 值
# 通过类的初始化方法(构造方法) __init__方法
bear.name = '虫二'
print(bear.name)
# 怎样访问一个对象的属性?(查)
# 一般访问 对象.属性 如果访问不到 会直接报错 需要记住错误提示
print(bear.name)
# print(bear.sex) # AttributeError: 'Bear' object has no attribute 'sex'
# 怎样修改一个对象的属性?(改)
# 同新增一样;系统会自动识别,不存在则新增,存在则修改 对象.属性 = 值
bear.name = '虫大'
bear.sex = '雄性'
print(bear.name)
print(bear.sex)
# 怎样删除一个对象的属性?(删) del 对象.属性
del bear.sex
# print(bear.sex) # AttributeError: 'Bear' object has no attribute 'sex'
# 查看对象的所有属性? 对象.__dict__
print(bear.__dict__)
print('2.2.3、类属性###################')
# 万物皆对象,类也是一个对象
# 比如,生产月饼的模板,对于月饼来说它是“类” 但模板本身是不是也是一个具体的东西,也是由其他的东西创建出来的??
# 怎样让一个类拥有属性?(增)
# 类名.类属性 = 值
XiongChuMo.enemy = '光头强'
# class XiongChuMo:
# enemy = '光头强'
# 怎样查询一个类的属性?(查)
# 通过类访问 类名.类属性
print(XiongChuMo.enemy)
# 通过对象访问 对象.类属性
print(bear.enemy)
# 为什么可以通过对象访问到类属性?
# 和Python对象的属性查找机制有关
# 优先到对象自身去查找属性 找到则结束
# 如果没有找到 则根据__class__找到对象对应的类 到这个类里面查找
# 怎样修改一个类的属性?(改)
# 通过类名改 系统也会自动检测 不存在,则新增 存在,则修改 类名.属性 = 值
XiongChuMo.enemy = '天才威'
print(XiongChuMo.enemy)
# 能否通过对象改? 不能!
# bear.enemy = '天才威' # 成新建一个属性了
# 怎样删除一个类的属性?(删)
# 通过类名删除 del 类名.属性
# 能否通过对象删除? 不能! del 语句只删除直系属性
del XiongChuMo.enemy
print(XiongChuMo.__dict__)
# print(XiongChuMo.enemy) # AttributeError: type object 'XiongChuMo' has no attribute 'enemy'
# 类属性的内存存储问题
# 一般情况下,属性存储在__dict__的字典当中 有些内置对象没有这个__dict__属性
# 一般对象可以直接修改__dict__属性 但类对象的__dict__为只读;默认无法修改 可以通过setattr方法修改
# 类属性被各个对象共享 类属性修改之后,所有的对象访问到的类属性都会跟着修改
# 查看一个类的所有属性 类名.__dict__
class WenJU:
ruler = '10cm'
pen = '英雄牌'
pencil = '2b'
pen = WenJU()
pen.length = '10cm'
pen.paizi = '英雄'
print(pen.__dict__)
pen.__dict__['length'] = 11
pen.__dict__['color'] = '黑色'
print(pen.__dict__)
print(WenJU.__dict__)
# WenJU.__dict__['ruler'] = '123' # TypeError: 'mappingproxy' object does not support item assignment
print('2.2.4、如何限制对象的属性?###################')
# 如何限制对象的属性?
# 通过设置类属性:__slots__ 这个属性是一个列表
# 列表中的元素,即为通过这个类创建出的对象可以添加的对象属性
# 如果这个类实例出的对象,添加了非列表之内的属性,则会报错
class Lei:
__slots__ = ['a']
q = Lei()
q.a = 123
# q.b = 12
print(q.a)
# print(q.b) # AttributeError: 'Lei' object has no attribute 'b'
print('2.3、方法相关##############################')
print('2.3.1、 方法的概念###################')
# 方法的概念
# 描述一个目标的行为动作 比如描述一个人怎样吃,怎样喝,怎样玩...
# 和函数非常类似
# 都封装了一系列行为动作
# 都可以被调用的之后,执行一系列行为动作
# 最主要的区别就是:调用方式
结果如下图
就先这样,遇到别的再补充。