十二、Python面向对象--设计原则

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

Open Closed Principle

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

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

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

 

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

Single Responsibility Principle   

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

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

 

依赖倒置(依赖抽象

Dependency Inversion Principle

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

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

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

 

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

Composite Reuse Principle

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

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

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

 

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

Liskov Substitution Principle

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

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

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

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

 

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

Law of Demeter

不要和陌生人说话。

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

 

示例:

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()
发布了39 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/chiaotien/article/details/104372201