Python中的类和对象(5)

Mixin是一种设计模式,允许在不修改原有类代码的情况下增加新功能。文章通过示例展示了如何使用Mixin让类具备新的行为,如让猪飞起来。同时,还分析了一个经典案例,展示了如何结合Displayer和LoggerMixin来创建具备日志记录功能的子类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Mixin

Mixin 即 Mix-in,翻译过来就是所谓的 “混入” 或者 “乱入”(也有音译为 “迷因”),它是一种设计模式。

所谓设计模式,就是利用编程语言已有的特性,针对面向对象开发过程中,反复出现的问题,而设计出来的解决方案。

为了更好地解释什么是 Mixin,我们先来看一段代码:

class Animal:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def say(self):
        print(f"我叫{self.name},今年{self.age}岁。")
    
class Pig(Animal):
    def special(self):
        print("我的技能是拱大白菜~")
    
p = Pig("大肠", 5)
p.say()
p.special()

代码实现如下:
好,现在由于剧情需要,我们要让大肠起飞……

问一下大家,咱们有没有办法在不修改原有类的代码结构的前提下,让大肠,也就是猪,飞起来?

其实仔细思考一下并不难,我们可以写一个类,它的功能就是起飞,然后让 Pig 类去继承它:

...
class FlyMixin:
    def fly(self):
        print("哦豁,我还会飞~")
    
class Pig(FlyMixin, Animal):
    def special(self):
        print("我的技能是拱大白菜~")
    
p = Pig("大肠", 5)
p.say()
p.special()
p.fly()

代码实现如下:
我叫大肠,今年5岁。
我的技能是拱大白菜~
哦豁,我还会飞~

2.经典案例分析

class Displayer:
    def display(self, message):
        print(message)
    
class LoggerMixin:
    def log(self, message, filename="logfile.txt"):
        with open(filename, "a") as f:
            f.write(message)
    
    def display(self, message):
        super().display(message)
        self.log(message)
    
class MySubClass(LoggerMixin, Displayer):
    def log(self, message):
        super().log(message, filename="subclasslog.txt")
    
subclass = MySubClass()
subclass.display("This is a test.")

supper()依赖mro顺序寻找的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杰深入学习计算机

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

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

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

打赏作者

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

抵扣说明:

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

余额充值