十二岁。面向对象的Python设计原则

发表时间:2020-02-19

- 原则 (目标、 总的指导思想

O pen C losed P rinciple

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

增加新功能,不改变原有代码。

例如:Man开车去上班,调用Car的run方法,Car的行驶路线可以随意更改,Man去上班的这件事情不用变

的单一职 责(一 个类的定义)

S ingle R esponsibility P rinciple

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

例如:Car只负责运送人,Man只管上班

依赖 倒置 (依赖 抽象

D ependency I nversion P rinciple

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

抽象不应该依赖细节,细节应该依赖抽象。

例如:Man上班需要交通工具Vehicle,至于什么交通工具,有啥就是啥

组合复用原则(复用 的最佳实践

C omposite R euse P rinciple

如果仅仅为了代码复用优先选择组合复用,而非继承复用。

组合的耦合性相对继承低。

例如,Man的交通工具很多,由自行车,摩托车,小汽车,电动车等等,有什么用什么

氏替换 (继承 后的重写 指导继承的设计

L iskov S ubstitution P rinciple

父类出现的地方可以被子类替换,在替换后依然保持原功能。

子类要拥有父类的所有功能。

子类在重写父类方法时,尽量选择扩展重写,防止改变了功能。

例如:Bike,Car的run实现各自是不一样的

米特法则 (类 与类交互的原则

L aw o f D emeter

不要和陌生人说话。

类与类交互时,在满足功能要求的基础上,传递的数据量越少越好。因为这样可能降低耦合度。

示例:

class Vehicle:
    def __init__(self, speed):
        self.speed = speed

    def run(self):
        pass


class Bike(Vehicle):
    def run(self):
        print("甩起两条小短腿")


class Car(Vehicle):
    def run(self):
        print("一脚油门的事情")


class Man:
    def __init__(self, name, vehicle):
        self.name = name
        self.vehicle = vehicle

    def work(self):
        print(self.name, "该去上班了")
        self.vehicle.run()


if __name__ == '__main__':
    w = Man("老王", Bike(10))
    # 老王骑车去上班
    w.work()
    # 老张开车去上班
    z = Man("老张", Car(100))
    z.work()

微配音

文章来源互联网,尊重作者原创,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890


Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free