类和对象—内存存储问题

类和对象

面向过程 & 面向对象

都是一种解决问题的思路(思想)

面向过程

在解决问题的时候,关注的是解决问题的每一个的过程(步骤)

面向对象

在解决问题的时候,关注的是解决问题所需要的对象

举个例子:做好饭之后洗碗

  • 面向过程 你
    • 洗菜
    • 点火倒油
    • 放菜,材料
    • 翻炒
    • 盛出
    • 放水
    • 放碗
    • 倒洗洁精
    • 开始刷
    • 擦干水
    • 摆放好
  • 面向对象
    在这里插入图片描述
对比

面向对象和面向过程都是解决问题的一种方式(思想) 面向对象本身是对面向过程的封装.

1> 面向过程编程最重要的是什么?

  • 按照步骤划分
    把一个任务,分解成具体的每一个步骤

2> 面向对象编程最重要的什么?

  • 按照功对象能进行划分
    找到对象, 确定对象属性和行为

3> 如何从面向过程编程的思想,过渡到面向对象编程?

  1. 一样的,列举出一个任务的具体实现步骤
  2. 试图分离这些实现步骤中的功能代码块
  3. 将这些功能代码块,划分到某一个对象中
  4. 根据这个对象以及对应的行为,抽象出对应的类 设计类

类和对象的执行过程

类和对象的存储方式、关系

在这里插入图片描述
定义一个类名为Money的类:

  • 实际上在内存中分配了一块地方,用来存放类,而类名Money是一个变量,存储在另一块内存中,里面存的是指向类的地址
  • 类和对象关系:对象是通过__ class __这个对象属性来访问类的
对象属性存储方式

在这里插入图片描述

类属性存储方式

在这里插入图片描述

类属性访问方式

1)通过 类名.类属性 访问类属性
2)通过 对象名.类属性 访问类属性

为什么可以通过 对象 访问到类属性?

答: 和Python对象的属性查找机制有关

  • 优先到对象自身去查找属性 找到则结束
  • 如果没有找到
  • 则根据__class__找到对象对应的类
  • 到这个类里面查找
    在这里插入图片描述
    类属性内存存储问题
  • 一般情况下,属性存储在__dict__的字典当中 有些内置对象没有这个__dict__属性
  • 一般对象可以直接修改__dict__属性
  • 但类对象的__dict__为只读;默认无法修改 可以通过setattr方法修改
    在这里插入图片描述
限制对象属性
class Money(object):

    # 通过设置类属性__slots__来限制对象的属性
    # __slots__这个属性是一个列表,列表中的元素,即为通过这个类创建出的对象可以添加的对象属性
    # 如果这个类实例出的对象,添加了非列表之内的属性,则会报错
    __slots__ = ['name', 'age']


p1 = Money()

# p1 这个对象只可以添加 age和 name这两个属性
p1.age = 18
p1.name = 'as'
print(p1.age)
print(p1.name)


# 如果这个类实例出的对象,添加了非列表之内的属性,则会报错
p1.num = 222
print(p1.num)


输出结果:
18
as
# 错误信息
Traceback (most recent call last):
  File "F:/PycharmProjects/code/限制对象的属性.py", line 19, in <module>
    p1.num = 222
AttributeError: 'Money' object has no attribute 'num'

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*Heygirl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值