.开-闭原则(目标,总的设计思想)
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 条评论) “” |