puthon之面向对象设计原则

.开-闭原则(目标,总的设计思想)

Open Closed Principle

对扩展开放,对修改关闭,

-----允主动增加新功能,不允许改变原代码

.类的单一职责

Single Responsibility Principle

一个类有且只有一个改变它的原因

也就是一个类干一件事

.依赖倒置(依赖抽象)分析时由子类抽象出父类。设计时由父类产生子类

Dependency lnversion Principle

客户端代码(调用的类)尽量依赖(使用)抽象的类。

抽象是稳定的,实现是多变的。

.多态:

父类的同一种动作或形为,在不同的子类上有不同的实现。

#案例是:老张用交通工具去东北

class Vehicle:

'''

代表具体的交通工具,如汽车,火车……

'''

.继承:隔离子类变化,将子类共性提取到父类中

def transport(self,str_position):#由于方法过于抽象所以写不了具体方法。它的价值在于客户端调用

pass

class Person:#客户端

'''

客户端

'''

def __init__(self,name):

self.name=name

def go_to(self,vehicle,str_position):#定义使用交通工具的方法。str_position是要去的地址。

#多态:调用父执行子

vehicle.transport(str_position)

#-----------------以上为架构--以下为程序---------------------------------------------------

class Car(Vehicle):

def transport(self,str_position):#调用父类方法

print("开汽车去",str_position)

class Airplane(Vehicle):

def transport(self,str_position):#调用父类方法

print("坐飞机去", str_position)

veh=Vehicle()

pen=Person("老张")

car01=Car()

pen.go_to(car01,"东北")

car02=Airplane()

pen.go_to(car02,"山东")

知识点:

如果类不用继承的方法类功能照样能实现目的,软件设计者为了约束这种无序开发的形为,采用强制手段进行约束。if isinstance(变量名,父类类型):判断子类是否继承了父类。

重写:子类实现了父类中相同的方法(方法名,参数)实际调用的是子类的方法

如:

练习;

手雷爆炸炸到敌人|玩家

也可能炸到其它事物

class Explode:

def explode(self,typename):

raise NotImplementedError#如果子类没有调用此方法就会报错。

class Grenade:

def __init__(self,name=""):

self.name=name

def gren_exp(self,veay,typename):

#判断veay这个对象是不是Explode类型。强制调用父类

if isinstance(veay,Explode):

veay.explode(typename)

class Enemy(Explode):

def explode(self,typename):

print("炸到了",typename)

class My(Explode):

def explode(self,typename):

print("炸到了",typename)

gren=Grenade("小明")

en=Enemy()

my=My()

gren.gren_exp(en,"敌人")

gren.gren_exp(my,"玩家")

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章