类空间问题
添加对象属性
对象的属性不仅可以在__init__里面添加,还可以在类的其他方法或者类的外面添加。
class A:
def __init__(self,name):
self.name = name
def func(self,sex):
self.sex = sex
# 类外部也可以:
obj = A('barry')
obj.age = 18
print(obj.__dict__) # {'name': 'Rabbit', 'age': 20}
# 类内部也可以:
obj = A('Rabbit') # __init__方法可以。
obj.func('男') # func 方法也可以。
通过对象找到类的属性
对象查找属性的顺序:先从对象空间找 ------> 类空间找 ------> 父类空间找 ------->.....
类名查找属性的顺序:先从本类空间找 -------> 父类空间找-------->
上面的顺序都是单向不可逆,类名不可能找到对象的属性
类与类之间的关系
- 依赖关系
- 关联关系
- 组合关系
组合:将一个类的对象封装到另一个类的对象的属性中,就叫组合。 - 聚合关系
关联,聚合,组合关系
写法是⼀样的. 但是, 从含义上是不⼀样的
(1). 关联关系. 两种事物必须是互相关联的. 但是在某些特殊情况下是可以更改和更换的.
(2). 聚合关系. 属于关联关系中的⼀种特例. 侧重点是xxx和xxx聚合成xxx. 各⾃有各⾃的声明周期. 比如电脑. 电脑⾥有CPU, 硬盘, 内存等等. 电脑挂了. CPU还是好的. 还是完整的个体
(3).组合关系. 属于关联关系中的⼀种特例. 写法上差不多. 组合关系比聚合还要紧密. 比如⼈的⼤脑, ⼼脏, 各个器官. 这些器官组合成⼀个⼈. 这时. ⼈如果挂了. 其他的东⻄也跟着挂了 - 实现关系
- 继承关系(类的三大特性之一:继承。)