Python基础(十)—面向对象的深入讲解(继承、Mixin编程机制等)

一个例子走近 Python 的 Mixin 类:利用 Python 多继承的魔力 一、引言 这篇博客,是我在看了《Python GUI Programming with Tkinter》第 76 页的小节 Exploiting the power of multiple inheritance 之后,压抑不住自己的激动兴奋之情,认真整理书写分享出来的。所用到的也是这一节作者写出来的代码,希望能给广大网友跟我一样的恍然大悟的痛快的感觉。 言归正传,Python 无疑是支持多继... 阅读详情

面向对象的三大特征

面向对象(Object Oriented),对象=属性+方法

  • 封装
    对象封装了属性、方法的函数,成为一个独立性的模块(信息隐蔽),使得对象更安全。

  • 继承
    面向对象的一个重要特性是复用性,继承是实现复用性的一个重要手段,继承就是子对象可以继承父对象的属性和行为,亦即父对象拥有的属性和行为,其子对象也就拥有了这些属性和行为。

  • 多态
    多态性是指不同对象对同一方法响应不同的行动。

self、_init_(self)、公有&私有

  • self
    相当于其他语言的this,每次实例化一个对象都保存了不同的self,当进行该对象的操作时,接受到第一个参数self,python则知道是哪一个实例的对象。
    	class Ball:
    	    def setName(self, name):
    	        self.name = name
    
    	    def kick(self):
    	        print('这是%s' % self.name)
    
    	ball = Ball()
    	ball.setName('足球')
    	ball.kick()
    
  • _init_(self)
    类似与其他语言的构造方法,是在实例化对象的时候执行的函数。
    	class Ball:
    	    def __init__(self, name):  # 可以对name进行参数的默认设置
    	        self.name = name
    
    	    def kick(self):
    	        print('这是%s' % self.name)
    
    	ball = Ball('足球')
    	ball.kick()
    
  • 公有&私有
    python的属性和方法默认都是公有的。可以通过 name manging(名字改编)也就是在属性前加上“__”两个下划线就可以变为私有,但是也不是绝对的私有。
    class Person:
        __name = 'lz'
    
    def getName(self):
        return self.__name
    
    p = Person()
    # print(p.__name)  # 报错AttributeError: 'Person' object has no attribute '__name'
    print(p.getName())  # lz
    print(p._Person__name)  # lz
    

继承的一些特性

继承对象的时候,子类会继承父类的属性和方法,但是前提是子类没有自己的构造函数(__init(self)),若有自己的构造方法(子类会覆盖父类的同名方法)。

  • __init__继承父类
    子类在使用了自己的__init__的时候,想要继承父类的属性,可以通过以下两种方法
    • 调用未绑定的父类方法
    • 使用super函数
    	class Fish:
    	    def __init__(self, x, y):
    	        self.x = x
    	        self.y = y
    
    	class Shark(Fish):
    	    def __init__(self, x, y, z):
    	        # Fish.__init__(self, x, y)  # 方法一:调用未绑定的父类方法,此时的self是子类的实例对象,所以称为未绑定父类的方法。因此容易想到调用的时候可以使用Fish.__init__(shark)
    	        super(Shark, self).__init__(x, y)  # 方法二:使用super函数,python推荐使用的方法
    	        self.z = z
    
  • python可以实现多重继承,但是python并不推荐。
    	class Ball(Ball1, Ball2)
    
  • 组合
    如果要求定义一个类:水池类,里面有鱼、乌龟。这种情况,可以使用组合的方式。
    	class Turtle:
    	    def __init__(self, x):
    	        self.num = x
    
    	class Fish:
    	    def __init__(self, x):
    	        self.num = x
    
    	class Pool:
    	    def __init__(self, x, y):
    	        self.turtle = Turtle(x)
    	        self.fish = Fish(y)
    
    	    def print_num(self):
    	        print('水池内有乌龟%d条,鱼%d条' % (self.turtle.num, self.fish.num))
    
    	pool = Pool(1, 10)
    	pool.print_num()
    

Mixin编程机制

  • 简介
    Mixin 编程是一种开发模式,是一种将多个类中的功能单元的进行组合的利用的方式,这听起来就像是有类的继承机制就可以实现,然而这与传统的类继承有所不同。通常 Mixin 并不作为任何类的基类,也不关心与什么类一起使用,而是在运行时动态的同其他零散的类一起组合使用。
  • 特点
    • 可以在不修改任何源代码的情况下,对已有类进行扩展;
    • 可以保证组件的划分;
    • 可以根据需要,使用已有的功能进行组合,来实现“新”类;
    • 很好的避免了类继承的局限性,因为新的业务需要可能就需要创建新的子类。
  • 实现
    • 多继承
      Python支持多继承,即一个类可以继承多个子类。可以利用该特性,可以方便的实现mixin继承。如下代码,类A,B分别表示不同的功能单元,C为A,B功能的组合,这样类C就拥有了类A, B的功能。
    	class A:
    	    def get_a(self):
    	    print 'a'
    
    	class B:
    	    def get_b(self):
    	    print 'b'
    
    	class C(A, B): 
    	    pass
    
    	c = C()
    	c.get_a()
    	c.get_b()
    
    • __bases__属性
      多继承的实现就会创建新类,有时,我们在运行时,希望给类A添加类B的功能时,也可以利用python的元编程特性,__bases__属性便在运行时轻松给类A添加类B的特性,如下代码:
        A.__bases__ += (B,)
        a.get_b()
      
        # 其实__bases__也是继承的机制,因为__bases__属性存储了类的基类。因此多继承的方法也可以这样实现:
        class C:
            pass
      
        C.__bases__ += (A, B, )
      
    • 插件方式
      以上两种方式,都是基于多继承和python的元编程特性,然而在业务需求变化时,就需要新的功能组合,那么就需要重新修改A的基类,这回带来同步的问题,因为我们改的是类的特性,而不是对象的。因此以上修改会对所有引用该类的模块都收到影响,这是相当危险的。通常我们希望修改对象的行为,而不是修改类的。同样的我们可以利用__dict__来扩展对象的方法。
        class PlugIn(object):
            def __init__(self):
                self._exported_methods = []
                
            def plugin(self, owner):
                for f in self._exported_methods:
                    owner.__dict__[f.__name__] = f
      
            def plugout(self, owner):
                for f in self._exported_methods:
                    del owner.__dict__[f.__name__]
      
        class AFeature(PlugIn):
            def __init__(self):
                super(AFeature, self).__init__()
                self._exported_methods.append(self.get_a_value)
      
            def get_a_value(self):
                print 'a feature.'
      
        class BFeature(PlugIn):
            def __init__(self):
                super(BFeature, self).__init__()
                self._exported_methods.append(self.get_b_value)
      
            def get_b_value(self):
                print 'b feature.'
      
        class Combine:pass
      
        c = Combine()
        AFeature().plugin(c)
        BFeature().plugin(c)
      
        c.get_a_value()
        c.get_b_value()
      

类、类对象和实例对象

三者是什么:定义的时候是类;在写完类之后就变成类对象;实例化一个类对象的时候,就是实例对象

  	class Ball:
  		name = '球'
  • 三者的相互影响
    类定义 -> 类对象 -> 实例对象。类定义中定义的属性都是静态属性,类属性和类对象相互绑定,不会依赖实例化对象。所以当实例对象的属性改变时,只是实例属性覆盖了类属型。反之,当实例对象的属性没改变,那就是还受类属型的影响

    	class Fish:
    	    size = 10
    
    	a = Fish()
    	b = Fish()
    	c = Fish()
    
    	print(a.size, b.size, c.size)  # 10 10 10
    
    	c.size += 10
    	print(a.size, b.size, c.size)  # 10 10 20
    
    	Fish.size += 100
    	print(a.size, b.size, c.size)  # 110 110 20
    
  • 类属性名和方法同名时,方法会被覆盖

  • 绑定
    python严格要求方法需要实例才能调用,这其实就是python的绑定概念。

    	class BB:
    	    def setXY(self, x, y):
    	        self.x = x
    	        self.y = y
    	    def printXY(self):
    	        print(self.x, self.y)
    
    	bb = BB()
    	print(bb.__dict__)
    	print(BB.__dict__)
    
    	bb.setXY(5, 10)  # 这里其实相当于bb.setXY(bb, 5, 10)
    	print(bb.__dict__)
    	print(BB.__dict__)
    
    	del BB
    	# cc = BB()  # 报错
    	bb.printXY()  # 5 10。因为实例化之后,就成为了静态属性,所以不会受影响
    

对象的内置方法

下面介绍对象的一些内置方法(本身具备有的)。

  • issubclass(class, classinfo)
    如果class是classinfo的子类就返回True,其他情况则返回False,有些特殊情况:
    • 一个类是自身的子类
    • classinfo可以是类对象组成的元组,只要与其中一个匹配,则返回True
    • issubclass(className, object) # True
  • isinstance(obecjt, classinfo)
    检查一个实例对象obecjt,是否属于classinfo类,同样classinfo可以是元组的格式。
    • 如果第一个参数object不是对象,则永远返回False
    • 如果第二个参数classinfo不是类或者类对象组成的元组,会抛出“TypeError”的异常
  • hasattr(object, name)
    查看实例对象object,是否有参数name,其中name是字符串的格式。
  • getattr(object, name[, default])
    返回对象object指定的属性值name,如果指定的属性不存在,则返回定义的default,如果没有定义默认值,则抛出异常NameError…not defined
  • setattr(object, name, value)
    设置对象object指定的属性值name,如果属性不存在,则会新建该指定属性,值为value
  • delattr(object, name)
    删除对象object指定的属性值name,如果属性不存在,则抛出异常AttributeError
class A:
    def __init__(self, x=1):
        self.x = x
class B(A):
    def __init__(self, x, y=-1):
        super(B, self).__init__(x)
        self.y = y

b1 = B(2, -2)
print(issubclass(B, B))  # True
print(issubclass(B, (A, object)))  # True

print(isinstance(b1, (A, object)))  # True

print(hasattr(b1, 'x'), b1.x)  # True 2
print(hasattr(b1, 'y'), b1.y)  # True -2

print(getattr(b1, 'x', 10))  # 2
print(getattr(b1, 'z', 'z参数不存在'))  # z参数不存在

print(setattr(b1, 'x', 10), b1.x)  # None 10
print(setattr(b1, 'z', 'z参数不存在'), b1.z)  # None z参数不存在

print(delattr(b1, 'x'))  # None delattr
  • property(fget=None, fset=None, fdel=None, doc=None)
    通过类定义的属性设置属性。
class C:
    def __init__(self, size = 10):
        self.size = size
    def getSize(self):
        return self.size
    def setSize(self, value):
        self.size = value
    def delSize(self):
        del self.size
    x = property(getSize, setSize, delSize)

c1 = C(20)
# 获取
print(c1.getSize())  # 20
print(c1.x)  # 20
# 设置
c1.x = 30
print(c1.x)  # 30
# 删除
del c1.x
# print(c1.x)  # 报错

文章参照小甲鱼

个人博客:Loak 正 - 关注人工智能及互联网的个人博客
文章地址:Python基础(十)—面向对象的深入讲解(继承、Mixin编程机制等)

《Python 多继承与 MRO 之谜——从“菱形继承”到 Mixin 设计》 本文深入解析Python多继承中的MRO(方法解析顺序)机制。通过菱形继承和钻石结构两个典型案例,展示C3算法如何确定方法调用顺序:子类优先、从左到右搜索、保证父类不重复。文章详细演示了super()在多继承环境下的行为特点,并重点介绍了Mixin模式的最佳实践——将独立功能封装为可复用的小类。最后强调,理解MRO是驾驭多继承的关键,建议合理使用Mixin并优先考虑组合而非继承。掌握这些原则能帮助开发者避免多继承陷阱,构建更灵活的类体系。 阅读详情

相关推荐

通过 Python 理解 Mixin 概念

Mixin 的概念 Mixin 即 Mix-in,常被译为“混入”,是一种编程模式,在 Python 等面向对象语言中,通常它是实现了某种功能单元的类,用于被其他子类继承,将功能组合到子类中。 利用 Python 的多重继承,子类可以继承不同功能的 Mixin 类,按需动态组合使用。 当多个类都实现了同一种功能时,这时应该考虑将该功能抽离成 Mixin 类。 举个例子 定义一个简单的类: clas...

面向人生编程 3283

Python随记(13) 继承 组合 绑定

继承 多重继承 绑定 类,类对象,类的实例对象 组合 __bases__方法

AI路漫漫 217

深度探索:非线性随机森林(Nonlinear Random Forest,NL-RF)原理及应用

非线性随机森林(NL-RF)旨在通过结合集成方法与高级技术来捕捉和建模数据中的非线性关系,从而改善传统随机森林在处理复杂非线性数据结构时的表现。

qq_51320133的博客 2068

python的mixin设计模式

在 Python 中,mixin 是一种设计模式,它是一个包含了特定功能单元的类,这些功能可以被其他类组合利用,这些功能可以被其他类组合利用,以实现代码的复用和功能扩展。mixin 类通常不被单独实例化,也不作为其他类的唯一父类,而是通过多重继承与其他类结合使用。子类可以根据需要组合继承不同功能的 mixin 类,从而在不修改源代码的情况下扩展已有类的功能。例如,假设有一个然后可以定义其他类,并通过继承来获得日志记录功能:在上述示例中,MyClass继承了的log方法,无需在MyClass。

zhendianluli的博客 1548

Windows 2000系统下载与全套镜像安装:从镜像校验到驱动兼容性实战指南

操作系统镜像文件是安装系统的核心载体,其完整性直接影响部署成败。哈希校验作为验证文件一致性的基础手段,能有效避免因镜像损坏导致的安装中断。对于已停止支持的操作系统,如Windows 2000,其镜像获取与安装更具挑战性,但它在工业控制、专用终端及怀旧技术研究中仍有不可替代的价值。通过理解镜像命名规则、服务包等级(如SP4)及引导方式,结合虚拟机或老硬件平台,可以顺利完成部署。同时,驱动兼容性是老系统运行的关键瓶颈,需针对性解决网卡、显卡等外设驱动问题。本文从镜像下载、校验到安装配置,系统梳理了Windows

weixin_32050773的博客 348

Docker安装Nacos(详细教程)

Docker安装Nacos的步骤相对直接,但需要注意一些细节以确保安装成功。

weixin_73060959的博客 1407

Python Mixin 模式:解锁代码复用的艺术

Mixin是一种设计模式和思想,而不是特定的语言特性或语法结构。它允许我们将某些类的功能提取出来,形成独立的小型类(即Mixin),这些类可以被其他类轻松地继承和使用,从而避免了传统单继承带来的局限性。通过这种方式,我们可以专注于实现单一职责的功能块,并将其组合进需要该功能的任何地方,而不需要修改原始类的定义。

东方佑 1209

微信聊天记录丢失原因与恢复方案详解

SQLite数据库作为移动应用常见的本地存储方案,其加密机制和存储结构直接影响数据安全性。以微信为例,聊天记录存储在EnMicroMsg.db等SQLite文件中,采用AES加密保护。当手机清理工具误删这些文件时,会导致特定时间段记录丢失。理解数据恢复原理需要掌握文件系统删除机制和闪存特性,其中关键点包括TRIM指令的影响和数据块覆盖风险。通过专业工具如DiskDigger或iMyFone D-Back,配合ADB调试和SQLite数据重组技术,可在黄金时间窗口内恢复记录。日常维护建议结合自动化备份方案和存

weixin_32612263的博客 386

【mixin是什么】

mixin的理解

weixin_59763367的博客 2340

ensp企业网综合实验(课程设计)

使用MSTP+VRRP技术实现负载均衡以及增加网络的可靠性;出口配置napt;所有用户均为自动获取IP地址;

qq_50829760的博客 1万+

2026基金本子新规必看!聚焦四大底层问题,利用AI辅助分别破解提升中标率

我拟申报的研究主题为【明确的研究主题或关键词组合】。选题方向也是评审专家关注的核心之一,申报前可以检索近五年领域前人中标项目,分析现有研究的空白与不足,并结合自身研究基础选择 “人无我有、人有我优” 的细分方向,如果是交叉学科选题,则要阐述不同学科的融合逻辑与创新点。“推动国家战略”、“带来行业发展”等宏观表述,有很多同仁都喜欢用这类话术开篇,但实际上宏大叙事无法替代具体的真实科学问题,明确不了研究要解决的核心痛点,更没有说明问题的现实针对性,评审看了往往抓不到研究的核心价值。

智能AI让学术科研更容易 295

关于Mixin

关于Mixin设计模式 今天读到一篇文章,关于python的Mixin设计模式,文中提到动态加载类、动态加载函数等动态加载的概念,不是很理解,在度娘的指导下有了一些己见。遂抄起键盘做此记录,可能和真正的Mixin有偏差,甚至毫不相干…欢迎老师或同学帮忙解读一下,我确实想知道到底啥意思,干嘛用的。 Mixin 是一种编程开发模式 和Java的接口类似 有一款冰淇淋,提供一些基础口味(主要功能类)有香草、巧克力味什么的,在这种基础口味上可以添加一些其他吃的,比如坚果、饼干(Mixin类)什么的 本质

MingT-L的博客 511

MATLAB代码实现了船舶航线优化的功能,使用混合遗传算法(结合模拟退火算法)来寻找从大连港到格拉斯通港的最优航线,同时考虑了船舶的参数、气象数据(风速、风向、有效波高、波浪阻力系数等)对航行的影响

这段MATLAB代码主要实现了船舶航线优化的功能,使用混合遗传算法(结合模拟退火算法)来寻找从大连港到格拉斯通港的最优航线,同时考虑了船舶的参数、气象数据(风速、风向、有效波高、波浪阻力系数等)对航行的影响。通过以上步骤,该代码能够找到一条在考虑船舶性能和气象条件下,从大连港到格拉斯通港的较优航线,最小化燃油消耗和航行时间的加权和。

AI的内部世界的博客 513

Python的Mixin编程机制

##Mixin 简介        ※Mixin 编程是一种开发模式,是一种将多个类中的功能单元的进行组合的利用的方式,这听起来就像是有类的继承机制就可以实现,然而这与传统的类继承有所不同。通常 Mixin 并不作为任何类的基类,也不关心与什么类一起使用,而是在运行时动态的同其他零散的类一起组合使用。 ##特点  &n...

Monster丶ZF的博客 1186

用 MVC 框架把 ABAP 报表写成可扩展的应用(2)

本文介绍了一个基于MVC架构的SAP报表模板,解决了传统ABAP报表开发中的三个核心痛点: 选择屏幕校验逻辑分散问题 - 通过统一的选择屏幕控制器集中管理校验逻辑 在线与后台输出不一致问题 - 共享同一数据模型,通过不同控制器实现多样化展示 屏幕流转管理混乱问题 - 主控制器统一管理所有屏幕流程和事件 该模板采用分层架构: Model层专注数据获取和业务规则 Controller层管理流程和交互 View层负责展示逻辑 特别适用于需要同时支持交互式ALV展示和后台批处理输出的报表场景,通过标准化的扩展点设计

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 78

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python mixin到底是什么

1.什么是Mixin 在面向对象编程中,Mixin是一种类,这种类包含了其他类要使用的方法,但不必充当其他类的父类。其他类是如何获取Mixin中的方法因语言的不同而不同。所以有时候Mixin被描述为'include'(包含)而不是 inheritance(继承)。 Mixins鼓励代码重用,并且可以用于避免多重继承可能导致(“如钻石问题”)的继承歧义,或者解决一个缺乏对一种语言的多重继承的支持...

Nicholas的专栏 2456

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python 继承中的 MixIn 详解

Python MixIn:灵活复用代码的,功能包, MixIn是Python中一种特殊的类设计模式,它允许开发者将特定功能以模块化方式,混入,不同类中,实现代码复用而不破坏类结构。与普通继承不同,MixIn强调的是,拥有功能,而非,是什么,的关系。 代码复用:避免重复编写日志记录、JSON序列化等通用功能 职责分离:保持类专注于核心功能,通过MixIn添加辅助能力 灵活组合:可自由搭配不同MixIn,如同时混入Logger和JS

余子越的博客 1176

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《100天精通Python——基础篇 2025 第14天:零基础玩转面向对象编程》

本篇文章系统讲解了 Python 的面向对象基础知识,包括对象与类的概念、类和对象的创建、实例属性和方法的使用,静态方法与类方法的区别与应用,封装、继承与多态的基本实现方式,并扩展介绍了 Mixin 混入模式的初步用法。文章定位为基础入门篇,不涉及复杂魔法方法和底层访问机制,适合初学者打下坚实的 OOP 基础,为后续进阶学习做好铺垫。

XAMO Lab|代码、调试与复盘笔记 2079

Python面向对象编程继承机制深度解析与示例

示例介绍Python对象编程的继承特性

ROGERLEE- Python场景式编程学习与训练 695

Python 面向对象进阶:Mixin、MRO 与类成员深度解析​

1.保持 Mixin 专注单一功能​2.命名清晰,使用Mixin后缀​3.避免在 Mixin 中定义__init__方法​4.明确依赖的基础方法,最好通过抽象类约束​。

博客简介 1268

Python的多重继承和MixIn

多重继承 继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。 回忆一下Animal类层次的设计,假设我们要实现以下4种动物: Dog - 狗狗; Bat - 蝙蝠; Parrot - 鹦鹉; Ostrich - 鸵鸟。 如果按照哺乳动物和鸟类归类,我们可以设计出这样的类的层次: 但是如果按照“能跑”和“能飞”来归类,我们就应该设计出这样的类的层次: 如果要把上面的两种分类都包含进来,我们就得设计更多的层次: 哺乳类:能跑的哺乳类,能飞的哺乳类; 鸟类:能跑的鸟类,能飞的鸟

python学习者的博客 404

python 面向对象编程之继承

文章目录python 面向对象编程之继承1.继承概念2.多继承的优劣3.Mixin机制 python 面向对象编程之继承 1.继承概念 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,新建的类可称为子类或派生类,父类又可称为基类或超类。 子类会遗传父类的属性和方法(私有化除外)。 python中新建的类支持多继承关系,一个类可以由一个或多个父类。 (新式类)在Python3中,没有显式地继承object,也会默认继承该类。 继承产生原因?-->用

qq_43729094的博客 387

编程与数学 02-017 Python 面向对象编程 06课题、继承

本文系统梳理Python面向对象继承机制,涵盖单继承、多继承、方法重写、super调用、MRO、抽象基类、Mixin等概念,结合代码示例阐释优缺点与最佳实践,助力构建高复用、低耦合的类层次结构。

明月看潮生的博客 1347

Python 面向对象高级编程-多重继承

继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。回忆一下Animal如果按照哺乳动物和鸟类归类,我们可以设计出这样的类的层次:但是如果按照“能跑”和“能飞”来归类,我们就应该设计出这样的类的层次:这么一来,类的层次就复杂了:如果要再增加“宠物类”和“非宠物类”,这么搞下去,类的数量会呈指数增长,很明显这样设计是不行的。

分享编程知识与技巧 致力于技术交流与学习 找我合作私聊 有偿解决计算机问题 1145

Python Mixin技术详解:灵活扩展类功能的艺术

Python Mixin技术详解:灵活扩展类功能的艺术

KE17RS的博客 2570
上一篇: Python基础(九)—异常except、else&with、异常的名称层次
下一篇: Python基础(十一)—魔法方法(构造析构、属性魔法、算数魔法、类型魔法等)
luoz_python
博客等级 码龄10年 57粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值