python面向对象学习笔记11 - 多态与抽象

本文探讨了Python中的多态概念,它体现在动态类型和类的子类化中,允许灵活使用不同子类。同时,介绍了抽象类和抽象方法,强调它们在代码设计中的重要性,虽然Python不直接支持抽象,但可以通过abc模块来实现。示例展示了如何创建抽象类和使用多态。
摘要由CSDN通过智能技术生成

多态

主要指类的具有多种延伸形态, 和调用时的多种形态
在python中体现为动态类型, 动态语言中关注的是对象的属性和方法, 而不是类型
本质上动态语言不需要多态这个特性, 因为语言本身就是多态的

使用多态实现灵活使用不同子类

class cal:
	def func(self, a, b):
		print("pass")
		pass

class add(cal):
	def func(self, a, b):
		print(a + b)
		return a + b

class minus(cal):
	def func(self, a, b):
		print(a - b)
		return a - b

def test(C:cal, a, b):
	C.func(a, b)

l = cal()
a = add()
m = minus()
# C 可以是cal类, 以及其子类add, minus
test(l, 10, 9)
test(a, 8, 7)
test(m, 6, 5)

# pass
# 15
# 1

抽象

抽象类: 抽象出来的类, 不能创建实例对象
抽象方法: 抽象出来的方法, 不能调用, 要求子类必须实现相应方法

本质目的是用于抽象层面的代码设计, 统一规定模式, 不考虑具体实现内容
python中不直接支持抽象, 需要abc模块, 并且可以设置抽象类的元类为abc.ABCMeta, 也可以用装饰器修饰抽象方法@abc.abstractmethod

from abc import ABCMeta, abstractmethod

class cal(object, metaclass=ABCMeta):
	@abstractmethod
	def func(self, a, b):
		pass

class add(cal):
	def func(self, a, b):
		print(a + b)
		return a + b

class minus(cal):
	def func(self, a, b):
		print(a - b)
		return a - b

def test(C:cal, a, b):
	C.func(a, b)

# l = cal()
a = add()
m = minus()
# C 只能是cal的子类 add, minus
# test(l, 10, 9)
test(a, 8, 7)
test(m, 6, 5)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值