一。单例模式
我们先用单例模式设计一个Rectangle类
然后用__new__方法设计单例模式,代码如下
然后我们来验证下,单例模式下是否只能生成一个实例
单例模式在程序设计中比较典型的应用场景:多个用户同时调用某个模块时,会生成一些日志,我们希望这些日志存在同一个文件内,而不是多个文件。
在生成日志模块我们就可以采用单例模式进行设计。
二。反射
概念:简单来说就是可以利用字符串来映射模块中的相应方法然后可以操作模块中相应的方法
我们以一个饭店点菜的实际场景来理解Python的反射机制
hasatter(对象,属性或方法名)
判断对象中是否有某个属性或某个方法,返回值是布尔型
getattr(对象,属性或方法名,缺省值) 判断对象中是否有某个属性或某个方法,如果有返回方法本身,没有则返回缺省值
setattr(对象,属性,新值)
将实例的属性改为新的值,如果属性不存在则新建
我们给实例guke1加个价格属性
@[toc]
全局只有一个实例
<font color=#03a3e3> 该实现方式在多线程场景下不安全
继承其他类的类称为派生类(derived class)
被其他类继承的类称为这些类的基类(base
class)
需要注意圆括号中基类的顺序:<font color=#03a3e3> 从左到右搜索 <font>
多继承会导致菱形 diamond关系:有至少一个基类可以从子类经由多个继承路径到达
基类方法可能被多次调用
防止重复访问,每个基类只调用一次
通过子类实例对象课调用父类已被覆盖
慎用多继承(二义性)
– 对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型
– 运算符重载不能改变其本来寓意
– 运算符重载只是一种 “语法上的方便” (sugar)
– 是一种函数调用的方式