def __init__(self)是什么意思_Python程序的设计原则起到什么作用?

在开始Python编程语言的学习之时,学记就曾提到过Python是一个面向对象编程语言。

面向对象在程序开发中,存在着一些设计原则,了解这些设计原则,可以使我们在今后的程序开发当中,易于与他人交流,减少交流成本

da94530c36213dd586603d2d544058d8.png

因此,今天就来了解一下这些原则。

单一职责原则 一个类只做该做的事情

在现实世界当中,具备很多功能的瑞士军刀往往在单一功能,不如专职于此功能的工具。比如在切割方面,昂贵的瑞士军刀是不如一把廉价的菜刀的。

对应到程序当中,就是一个功能只让一个类来负责。

里氏替换原则 - 任何时候可以用子类对象替换掉父类对象

里氏替换原则是由芭芭拉·利斯科夫(Barbara Liskov)在1987年在一次会议上名为“数据的抽象与层次”的演说中首先提出。

里氏替换原则的内容可以描述为,子类对象可以在程式中代替其父类对象

合成聚合复用原则 - 优先使用强关联关系而不是继承关系复用代码

最少知识原则 - 不要给没有必然联系的对象发消息

在了解这些原则之后,可以来看一个实例,这个实例将面向对象的三大支柱:封装、继承、多态。

"""

月薪结算系统 - 部门经理每月20000 程序员每小时150 销售员3000底薪加销售额5%提成

"""

from abc import ABCMeta, abstractmethod

class Employee(metaclass=ABCMeta):

"""员工(抽象类)"""

def __init__(self, name):

self.name = name

@abstractmethod

def get_salary(self):

"""结算月薪(抽象方法)"""

pass

class Manager(Employee):

"""部门经理"""

def get_salary(self):

return 20000.0

class Programmer(Employee): 封装 多态

"""程序员"""

def __init__(self, name, working_hour=0):

self.working_hour = working_hour

super().__init__(name)

def get_salary(self):

return 150.0 * self.working_hour

class Salesman(Employee): 封装 多态

"""销售员"""

def __init__(self, name, sales=0.0):

self.sales = sales

super().__init__(name)

def get_salary(self):

return 3000.0 + self.sales * 0.05

class EmployeeFactory(): 继承

"""创建员工的工厂(工厂模式 - 通过工厂实现对象使用者和对象之间的解耦合)"""

@staticmethod

def create(emp_type, *args, **kwargs):

"""创建员工"""

emp_type = emp_type.upper()

emp = None

if emp_type == 'M':

emp = Manager(*args, **kwargs)

elif emp_type == 'P':

emp = Programmer(*args, **kwargs)

elif emp_type == 'S':

emp = Salesman(*args, **kwargs)

return emp

def main():

"""主函数"""

emps = [

EmployeeFactory.create('M', '赵本山'),

EmployeeFactory.create('P', '赵四', 120),

EmployeeFactory.create('P', '刘能', 85),

EmployeeFactory.create('S', '谢广鲲', 110000),

]

for emp in emps:

print('%s: %.2f元' % (emp.name, emp.get_salary()))

if __name__ == '__main__':

main()

在上面的代码里,经理,程序员和销售员这三个类很好的体现了,封装,继承这两点。

这些原则和特性并不是一两篇文章就可以说的清的。如何具体的应用,学记将在之后的学习当中慢慢展开。

如果想学习更多科技知识,可以点击关注

如果对文章中的内容有什么困惑的地方,可以在评论区提出自己的问题,学记同大家一起交流,解决各种问题,一起进步。

青年学记 陪伴着各位青年

21ef3a953e79ac0c8b0f4e34ad2708d2.png

作者:青年学记 一名不断进步的程序

一起学习 一起进步

走向自立

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值