Python-什么是Mixin

本文介绍了Mixin的概念,其在多重继承中的应用,以及如何创建和使用Mixin类。重点讲解了Mixin类的特性,如功能单一、不可实例化和设计原则。同时提供了注意事项,强调了简化继承结构的重要性。

Mixin

1. 什么是Mixin

Mixin(mix-in)混入,是一种设计思想或者设计模式,本身并不是代码逻辑或者方法,只是一种理念,很多面向对象的编程语言都有Mixin的设计模式。

2. 为什么用Mixin

Mixin,出现在多重继承的场景中,一般用于功能扩展,而不作为实体父级类。

举个例子:

# -*- coding:utf-8 -*-
class A():
	def func01():
		print('A func01')

class BMixin():
	def flyable():
		print('I cam fly')
		
class C(A,BMixin):
	pass

可以看见B类在起名时给后面加了Mixin的后缀,说明BMixin是一个混入类,并不是所有类都可以从理念上定义为Mixin类,它必须遵循以下约定:

3. 什么样的类可以成为Mixin类

  1. Mixin类里只包含功能且不能被实例化。就比如鸟会飞,鸟是一个实体类,飞是一种功能,飞的这个功能如果提出来作为一个类class Bird(FlyMixin),这种类FlyMixin就算实例化了也没啥意义。
  2. Mixin类功能单一,如果有多个功能,那就写多个Mixin类,拆的很细,鸟会飞和鸟能拉屎你就可以写成两个Mixin类来使用(粗糙了)。
  3. Mixin类不依赖子类,子类也不是一定依赖Mixin类。毕竟鸟会不会飞,不是说他不不会飞我们就说他是一只狗。

4. 注意事项

Mixin好用可不要贪杯,毕竟如果你的类变成这样:
class A(BMixin,CMixin,DMixin)
如果BMixin,CMixin,DMixin中有相同方法名的方法或者super,就会让你的阅读如同鸭溪。
总之,我的理解,能简化继承结构,就不要搞多重继承的Mixin混入。

毕竟头发少掉一根是一根,你说呢?

ros@u22:~$ sudo apt install ros-dev-tools Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: brz bzr libapr1 libaprutil1 libserf-1-1 libsvn1 libutf8proc2 mercurial mercurial-common python3-bloom python3-breezy python3-catkin-pkg python3-catkin-pkg-modules python3-colcon-mixin python3-configobj python3-deprecated python3-dulwich python3-fastbencode python3-fastimport python3-github python3-gitlab python3-gpg python3-patiencediff python3-requests-toolbelt python3-rosdistro python3-vcstool python3-vcstools python3-wrapt ros-build-essential subversion Suggested packages: brz-doc python3-breezy.tests kdiff3 | kdiff3-qt | kompare | meld | tkcvs | mgdiff qct python3-mysqldb python3-breezy-dbg python3-kerberos python3-paramiko python-configobj-doc python-gitlab-doc db5.3-util libapache2-mod-svn subversion-tools The following NEW packages will be installed: brz bzr libapr1 libaprutil1 libserf-1-1 libsvn1 libutf8proc2 mercurial mercurial-common python3-bloom python3-breezy python3-catkin-pkg python3-colcon-mixin python3-configobj python3-deprecated python3-dulwich python3-fastbencode python3-fastimport python3-github python3-gitlab python3-gpg python3-patiencediff python3-requests-toolbelt python3-rosdistro python3-vcstool python3-vcstools python3-wrapt ros-build-essential ros-dev-tools subversion The following packages will be upgraded: python3-catkin-pkg-modules 1 upgraded, 30 newly installed, 0 to remove and 565 not upgraded. Need to get 8,874 kB of archives. After this operation, 45.4 MB of additional disk space will be used. Do you want to continue? [Y/n] Y Ign:1 http://mirrors.ustc.edu.cn/ubuntu jammy-updates/main amd64 python3-configobj all 5.0.6-5ubuntu0.1 Ign:2 http://mirrors.ustc.edu.cn/ubuntu jammy/universe amd64 python3-fastbencode amd64 0.0.5-1build1 Ign:3 http://mirrors.ustc.edu.cn/ubuntu jammy/universe amd64 python3-dulwich am
09-24
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AITyson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值