02类(class)和对象(object)的区别是什么,举例说明?
问题: 类(class)和对象(object)的区别是什么,举例说明?
👇 点击展开/折叠 面试背诵模板(建议先背这个)
内存分配与存储位置差异
类本身也是对象(元类的实例),但主要存储静态信息(类属性、方法定义)和方法表。对象的实例属性存储在各自独立的堆内存空间,通过指针(__dict__)维护。实例方法虽由对象调用,但实际存储在类中,调用时自动传入 self 绑定到当前实例。
代码示例与属性查找机制
1 | class Dog: |
高频追问(面试必考)
Q1:修改对象属性会影响类属性吗?
不会。d1.species = "新物种" 是在实例上新建同名属性,访问时优先查找实例 __dict__,从而遮蔽(屏蔽)类属性。类属性本身并未改变,Dog.species 仍为 "犬科"。
Q2:修改可变类属性(如列表)会发生什么?
若类属性是可变对象(如列表),通过对象调用 d1.tricks.append('sit') 会直接修改共享列表,影响所有实例;若通过赋值 d1.tricks = [] 则是新建实例属性,不影响类属性。
1 | class Dog: |
Q3:d1.__dict__ 和 Dog.__dict__ 的区别?d1.__dict__ 存储实例属性(如 {'name': '旺财'});Dog.__dict__ 存储类属性、方法等。查找属性时按实例 __dict__ → 类 __dict__ → 父类 __dict__ 顺序。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LGQ的博客!