一、昨日内容回顾
成员:
变量
1、实例变量。对象.xxx self.属性 = 值
2、变量名。 类名.变量 直接写在类中的变量 可以通过对象去访问类变量。不能修改
方法
1、实例方法
def 方法(self):
pass
用对象去调用实例方法
2、类方法
@classmethod
def 方法(cls):
pass
3、静态方法
@staticmethod
def 方法():
pass
属性
可以把方法转换成属性
@property
def 属性(self):
return ""
对象.属性
私有:
用双下划线做前缀,私有的内容只能在本类中访问。
二、类与类之间的关系
在面向对象的世界中,类与类中存在以下关系:
1、依赖关系:我用着你,但是你不属于我,这种关系是最弱的
2、关联关系:两种事物必须是关联的,但是在某些情况下是可以更改和更换的
3、组合关系:属于关联关系中的一种特例,写法上差不多。组合关系比聚合还要紧密
比如人的大脑,心脏,各个器官组合成一个人,缺一不可
4、聚合关系: 属于关联关系中的一种特例,侧重点是xxx和xxx聚合成xxx。各自有各自
的声明周期。比如电脑。电脑里有CPU,硬盘,内存等等。电脑系统挂了,cpu还是好的
5、继承关系: x是⼀种y, 那x就可以继承y. 这时理解层⾯上的. 如果上升到代码层⾯.
我们可以这样认为. ⼦类在不影响⽗类的程序运⾏的基础上对⽗类进⾏的扩充和扩展.
这⾥.我们可以把⽗类被称为超类或者基类. ⼦类被称为派⽣类.
结论:self就是你访问方法的那个对象。先找自己,然后再找父类。
三、类中的特殊成员
什么是特殊成员呢?__init__() 就是一个特殊的成员,说白了。带双下滑线的那一坨。这些
方法在特殊的场景的时候会被自动执行。比如:
1、类名() 会自动执行 __init__()
2、对象()会自动执行__call__()
3、对象[key] 会自动执行__getitem__()
4、对象[key] = value 会自动执行__setitem__()
5、del 对象[key] 会自动执行 __delitem__()
6、对象+对象 会自动执行__delitem__()
7、with 对象 as 变量 会自动执行__enter__ 和 __exit__
8、打印对象的时候,会自动执行__str__
9、干掉可哈希 __hash__ == None 对象就不可哈希了