Table of Contents
做法:B类继承A类
关联,
部分与整体的关系,功能的复用,变化影响一个类;
A与B关联,意味着B是A的一部分;
做法:在A类中包含B类型成员。
依赖
A类依赖B类,意味A类的某些功能靠B类实现;
做法:B类型作为A类中方法的参数,并不是A的成员。
1.什么时候放到参数,什么时候放成员变量:
一个方法用,就选依赖,多个方法用,就是关联
2.隔离变化的时候:用继承关系
开闭原则
Open Closed Principle
对扩展开放,对修改关闭。
增加新功能,不改变原有代码。
类的单一职责也叫高内聚
Single Responsibility Principle
一个类有且只有一个改变它的原因。
依赖倒置
Dependency Inversion Principle
客户端代码(调用的类)尽量依赖(使用)抽象的组件。
抽象的是稳定的。实现是多变的。
变化点
组合复用原则(关联关系)
Composite
Reuse Principle
如果仅仅为了代码复用优先选择组合复用,而非继承复用。
组合的耦合性相对继承低。
里氏替换
Liskov Substitution Principle
父类出现的地方可以被子类替换,在替换后依然保持原功能。
子类要拥有父类的所有功能。
子类在重写父类方法时,尽量选择扩展重写,防止改变了功能。
重写
就是子类继承父类,然后子类中有父类的方法
扩展重写
重写的时候,先调用父类的方法,
迪米特法则,低耦合(类与类交互的原则)
Law of Demeter
不要和陌生人说话。
类与类交互时,在满足功能要求的基础上,传递的数据量越少越好。因为这样可能降低耦合度。
什么叫继承:
什么是封装:
数据角度讲:数据统一,行为角度讲,像类外提供功能,实现隐藏细节
设计角度讲,分而治之,封装变化,高耦合,
什么是多态:
调用父,执行子
内置可重写函数
运算符重载
让自定义的类生成的对象(实例)能够使用运算符进行操作
双下划线开头结尾,和双下划线开头的区别
一个是私有变量,一个是系统定义变量
__str__和__repr的区别
__str__函数:将对象转换为字符串(对人友好的)
__repr__函数:将对象转换为字符串(解释器可识别的)
一个返回给人看,一个返回给解释器看
eval函数,与linux的eval差不多
python中直接打印列表,会使用什么函数?
__str__或者__expr__
python重写算数运算符
python 反向算数运算符
python 复合运算符
比较运算符重载