python 封装、继承与开闭原则

封装

示例代码链接: https://blog.csdn.net/god_yutaixin/article/details/102766835

继承

从设计角度讲,肯定是将程序封装成一个个子类,然后再根据需要,把子类中的共性,抽象出一个父类
从编码角度讲,父类必须写在子类的前面,子类才能找到它

示例1

#父类
class Person:
	def __init__(self,name):
		self.name = name

	def say(self):
		print('说话')

#子类1
class student(Person):
	#子类没有构造函数时,会继承父类的构造函数
	pass

s01 = Student()	#此时会报错,因为子类继承自父类,在自己代码pass的情况下,实际上是拥有父类的构造函数init__()的,所以需要向__init(self,name)中传一个name参数
s02 = Student(Terry)	#此时就对了
s02.say()	#子类的实例可以调用父类的方法

#子类2
class Teacher(Person):
	#当子类有自己的构造函数时,会覆盖掉父类的构造函数
	def __init__(self,age,name):
		self.age = age
		#当想使用父类的构造函数时,可以使用super().__init__(想要继承的父类的初始化属性)
		super().__init__(name)

t01 = Teacher(28,'TT')
print(t01.age)
print(t01.name)

示例2
需要符合面向对象的设计原则:开闭原则:即对扩展开发(写类属于扩展),对修改关闭,增加新功能,不能改变原有代码

#老张开车去东北
#需求变化:坐飞机 | 坐火车 | 骑车
class Person:
	def __init__(self,name):
		self.name = name
	
	def go_to(self,position,type)
		'''
		:param position:地名
		:param type:去的方法
		:return:
		'''
		print('去:' + position)
		
		#判断怎么走
		#如果是飞机就飞,用isinstance()判断该对象是否属于该类
		if isinstance(type,Car)
			type.run()
		#如果是车就跑
		#这里修改了代码,违反了面向对象的开闭原则
		elif isinstance(type,Airplane):
			type.fly()
	
#这个类只有一个run功能,满足设计原则:类的单一职责,一个类有且只有一个改变它的原因
class Car:
	def run(self):
		print('走你~')

#添加坐飞机的类,属于加功能,不违反开闭原则,开发时一个个类为一个单元
class Airplane:
	def fly(self):
		print('嗖~')

c01 = Car()
lz = Person('老张')
lz.go_to('东北',c01)	#打印出  '去:东北'  '走你~'

a01 = Airplane()
lz.go_to('东北',a01)	#打印出 '去,东北'  '嗖~'

示例2重构

class Person:
	def __init__(self,name):
		self.name = name
	
	def go_to(self,position,type)
		print('去:' + position)
		type.transport(position)	#符合开闭原则:对修改关闭,增加新功能,不改变原有代码

#抽象出各种交通工具的父类(依赖倒置:调抽象)
class Vehicle:	
	def transport(self,position):
		pass

class Car(Vehicle):
	#继承,对父类的方法进行重写
	def transport(self,position):
		print('开车到',position)
		
#对扩展开放
class Airplane(Vehicle):
	#继承,对父类的方法进行重写
	def transport(self,position):
		print('飞到',position)

#之后要使用什么交通工具,只要写该交通工具的类就行了		
class Bike:
	......

c01 = Car()
a01 = Airplane()
lz = Person('老张')
lz.go_to('东北',a01)	#print: '去:东北'  '飞到 东北'
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值