Python基础 - 8.面向对象编程

8、Python 数据结构、控制流与面向对象编程基础 本博客详细介绍了 Python 编程语言的基础知识,包括常用的数据结构(列表、元组和字典)、控制流(条件语句和循环)、模块化编程(模块导入与函数使用)以及面向对象编程(类与对象、继承与多态)。通过丰富的代码示例和流程图,帮助读者快速掌握 Python 编程的核心概念,并能应用于实际项目开发中。 阅读详情

面向对象和面向过程

面向过程:C、Basic、汇编

面向对象:C++、Java、PHP

面向过程是从计算机的角度出发考虑问题

面向对象是从人的角度出发考虑问题

比如:学生去教室上课

面向过程:

起床
洗刷刷
穿衣服
吃早餐
出门,往教室方向走
if 遇到红灯:
   while 红灯亮:
     等待直到绿灯
If 遇到漂亮妹子:
  搭讪
到了教室
while 上课时间未到:
  等待
开始上课
while 下课时间未到:
  吃饭
  睡觉
  打豆豆
下课

面向对象:

定义学生类
定义学生类的属性:姓名、年龄、身高、专业、班、学号、……
定义学生类的方法:吃饭()、睡觉()、上课()、下课()
定义教室类
定义教室类的属性:位置、容量、网络状态
定义教室类的方法:开门()、关门()、……
创建一个学生类的对象 yangbing
创建一个教室类的对象 204
执行学生的上课的方法 yangbing.上课(204)

面向过程由于适用于底层软件

相对面向过程来说,面向对象更适合组建大团队工作,适用于上层的软件。

面向对象是从第三者的角度出发来考虑问题。

面向对象和面向过程是不同的编程思维,在不同的场合下使用,看问题的角度不同。不能绝对说谁优谁劣

常用面向对象编程语言的区别

C++、Java、Python

Java:纯粹的面向对象编程语言。里面没有任何的面向过程的东西。

public class Test {
  public static void main() {
    System.out.println(“hello”):
  }
}

任何的代码都必须在类里面去编程,脱离了类就什么都没有了

C++:在C语言的基础上,加上面向对象的概念(C加面向对象)

int main() {
  printf(“hello”);
}

Python:面向过程或面向对象

print("hello") 

什么是对象

Python没有new

程序猿没有对象怎么办?自己new一个

天上飞的:飞机、大炮、小鸟……

地上跑的:蛇、牛、羊、猪、……

水里游的:鱼、虾、蟹、……

抽象的:规则、项目、方法……

世界上万事万物都是对象

如何区分类和对象

思考下面的话:

  • 1 狗是类 狗是对象

  • 2 yangbing是类 yangbing是对象

对象是具体的;类是抽象的。

  • 一个类中可以包含多个对象

  • 类是某一系列对象的集合(总称)

声明类和创建对象

OOP:Object Oriented Programming(面向对象编程)

OOA、OOD、OOP:

Python中创建类的方式:

class 类名:
   类中的代码

约定的习俗:类名首字母大写。比如:

class Dog:
    pass

Python中创建对象的方式

对象名 = 类名()

比如:

# dog1是Dog的对象
dog1 = Dog()
print(dog1) # <__main__.Dog object at 0x000001CAA988FE48>
print(type(dog1)) # <class '__main__.Dog'>

Dog是类

dog1是对象。dog1是Dog的对象

我们是在面向对象编程,实际上是对dog1编程。

属性

属性就是对象所拥有的特性。通过如下方法设置

对象.属性 = 属性值

比如:

class Dog:
    pass


dog1 = Dog()
dog1.name = '旺财' # 姓名
dog1.age = 13 # 年龄
dog1.sex = 'male' # 性别
print(dog1.name)
print(dog1.age)
print(dog1.sex)

如果想要查看类里面的所有属性和方法,可以通过dir()去查看

print(dir(dog1))
dog1.name = '旺财' # 姓名
dog1.age = 13 # 年龄
dog1.sex = 'male' # 性别
print(dir(dog1))

留意输出的结果:

在这里插入图片描述

留意两次运行的结果,后面多了name、age、sex。说明新的属性被添加到类中了。

方法

方法是类的对象所拥有的一系列的操作。

我们一般会在类中定义方法

def 方法名(方法的参数):
  方法的实现代码

注意:方法名首字母小写。比如:

class Dog:
    # 狗的吃饭的方法
    def eat(self):
        print('狗吃肉')
    # 狗叫的方法
    def bark(self):
        print('旺')

dog1 = Dog()
dog1.eat()
dog1.bark()

方法跟函数有点类似:

  • 函数是独立的概念,是单独存在的。方法则是地属于类的概念,脱离了类方法就没有意义
  • 函数可以没有参数。方法至少得有一个参数self(Java中的this),表示当前对象本身
  • 如果要在方法中访问类的属性,需要通过如下方式编写:
self.属性名

比如:

class Dog:
    # 狗的吃饭的方法
    def eat(self):
        print('狗吃肉')
    # 狗叫的方法
    def bark(self):
        print('旺')
    # 打印狗的信息
    def info(self):
        print("姓名:%s,年龄:%d" % (self.name, self.age))

dog1 = Dog()
dog1.eat()
dog1.bark()
dog1.name = '旺财' # 姓名
dog1.age = 13 # 年龄
dog1.info()

如果要给方法传递参数,参数写到方法的self参数的后面

class Dog:
    # 狗的吃饭的方法
    def eat(self):
        print('狗吃肉')
    # 狗叫的方法
    def bark(self):
        print('旺')
    # 打印狗的信息
    def info(self):
        print("姓名:%s,年龄:%d" % (self.name, self.age))
    # 设置狗的名字
    def set_name(self, name):
        # self.name表示狗的name属性
        # name表示传入的参数
        self.name = name 

dog1 = Dog()
dog1.eat()
dog1.bark()
#dog1.name = '旺财' # 姓名
dog1.set_name('旺财') 
dog1.age = 13 # 年龄
dog1.info()

方法也可以有返回值,这点与函数一样

class Dog:
    # 狗的吃饭的方法
    def eat(self):
        print('狗吃肉')
    # 狗叫的方法
    def bark(self):
        print('旺')
    # 打印狗的信息
    def info(self):
        print("姓名:%s,年龄:%d" % (self.name, self.age))
    # 设置狗的名字
    def set_name(self, name):
        # self.name表示狗的name属性
        # name表示传入的参数
        self.name = name 
    # 读取狗的名字
    def get_name(self):
        return self.name

dog1 = Dog()
dog1.eat()
dog1.bark()
#dog1.name = '旺财' # 姓名
dog1.set_name('旺财') 
dog1.age = 13 # 年龄
dog1.info()
name = dog1.get_name()
print(name)

注意:在Python中没有重载的概念。类中的方法名字必须是唯一的。

init__和__del

  • __init__是一个方法。是python系统中自带的方法。

  • 该方法至少也需要带一个参数self

  • 该方法表示:初始化的操作。

  • 当创建类的对象的时候,就会调用__init__方法。

class Dog:
    # 初始化(两个下划线)
    def __init__(self, name, age):
        self.name = name
        self.age = age

dog1 = Dog('旺财', 13)
print(dog1.name)
print(dog1.age)

Java中的构造方法是否对应python中的__init__?不是

另外,当用户调用del命令去删除对象的时候,会触发__del__方法的调用。

class Dog:
    # 初始化(两个下划线)
    def __init__(self, name, age):
        self.name = name
        self.age = age
    # 销毁
    def __del__(self):
        print('__del__')
        self.name = ''
        self.age = 0

dog1 = Dog('旺财', 13)
print(dog1.name)
print(dog1.age)

del dog1
print('over')

如果程序中没有del,在程序结束后,python会触发gc垃圾回收机制,将不用的变量全部释放,所以在程序结束后对应的__del__才会被执行。

class Dog:
    # 初始化(两个下划线)
    def __init__(self, name, age):
        self.name = name
        self.age = age
    # 销毁
    def __del__(self):
        print('__del__')
        self.name = ''
        self.age = 0

dog1 = Dog('旺财', 13)
print(dog1.name)
print(dog1.age)

del dog1
print('over')

运行的结果:

在这里插入图片描述

思考:

class Dog:
    # 初始化(两个下划线)
    def __init__(self, name, age):
        self.name = name
        self.age = age
    # 销毁
    def __del__(self):
        print('__del__')
        self.name = ''
        self.age = 0

dog1 = Dog('旺财', 13)
dog2 = dog1

del dog1
print('over')

现在dog2指向dog1,那么__del__是在del的时候执行,还是在程序结束后执行?

程序结束后再调用

每个类有一个引用计数,描述有多少个对象指向它。

只有当引用计数值为0的时候,才会调用__del__。

print('---0---')
del dog1
print('---1---')
del dog2
print('---2---')

在这里插入图片描述

str

如果声明一个类的对象后,想要打印该对象的信息,可以通过重写__str__方法,指定返回值来实现。

class Dog:
    # 初始化(两个下划线)
    def __init__(self, name, age):
        self.name = name
        self.age = age
    # __str__必须返回一个字符串
    def __str__(self):
        return self.name + "," + str(self.age)

dog1 = Dog('旺财', 13)
print(dog1)

私有

Private protected public 3P

Python中描述私有属性和私有方法,通过前置下划线表示:

  • _xxx:单前置下划线。

  • __xxx:双前置下划线。

  • _xxx_:双前置双后置下划线。类的内部定义好的。一般不让外界直接调用。

一般常用双前置下划线。

class Dog:
    # 初始化(两个下划线)
    def __init__(self, name):
        self.name = name
        self.__age = 0 # age私有
    # __str__必须返回一个字符串
    def __str__(self):
        return self.name + "," + str(self.__age)

dog1 = Dog('旺财')
dog1.__age -= 20
print(dog1)

此时,运行程序,会报错。__age找不到该属性

在这里插入图片描述

同样可以把方法私有化

class Dog:
    # 初始化(两个下划线)
    def __init__(self, name):
        self.name = name
        self.__age = 0 # age私有
    # __str__必须返回一个字符串
    def __str__(self):
        return self.name + "," + str(self.__age)

    # age的get方法
    def get_age(self):
        return self.age

    # age的set方法
    def __set_age(self, age):
        self.__age = age
        
    # yearPass过了一年
    def year_pass(self):
        self.set_age(self.__age + 1)

dog1 = Dog('旺财')
dog1.__set_age(-20)
print(dog1)

如果强行调用,会报错

在这里插入图片描述

对象的引用计数

import sys

class Dog:
    # 初始化(两个下划线)
    def __init__(self, name):
        self.name = name
        self.__age = 0 # age私有


dog1 = Dog('旺财')
print(sys.getrefcount(dog1))

运行结果为:

在这里插入图片描述

这里得出的结果比实际结果要多1,需要自行减去1。

练习

  1. 定义一个类Cat:
  • 1 通过初始化方法传入猫的姓名(加肥猫、叮当猫、HelloKitty猫)。年龄初始化为0

  • 2 定义一个方法yearPass(),表示过了一年,方法中让年龄增加1。

  • 3 重写__str__方法,打印猫的姓名和年龄

  • 4 定义并创建猫的对象,传入姓名。然后每调用一次yearPass(),就打印一下猫的信息

  • 5 每过几年,就给猫添加饰物;3岁添加衣服、5岁添加脚垫、8岁添加铃铛、10岁剪胡子。在__str__方法中,把添加的饰物都打印出来

   汤姆,1岁,无饰物

   …………

   汤姆,3岁,衣服

   ……

   汤姆,9岁,衣服、脚垫、铃铛

   ……

   汤姆,11岁,衣服、脚垫、铃铛、剪胡子

2 根据如图所示,类之间的关系,写出对应的代码
在这里插入图片描述

3 定义一个类Point,描述三维空间的一个点。属性包括x、y、z的值。

  • 添加两个方法,描述当前点与另外一个点之间的曼哈顿距离与欧氏距离

  • 添加两个函数,描述任意两个点之间的曼哈顿距离与欧氏距离

本章项目源码

URL:https://gitee.com/yuanbaonet/master_python/tree/baoai_python_v8/

对应版本:baoai_python_v8

对应文件:sample/python/p8.py

【GPIO模拟串口通信协议】 由于这段时间搞了个安卓相关的项目,需要和安卓进行Uart通信。但是选用的芯片并没有自带uart功能,所以在充分评估项目后,考虑波特率不高的情况下,决定使用GPIO去模拟串口通信协议了。 阅读详情

相关推荐

华为[ENSP]—— 实验二、三层交换和ARP的工作原理

华为[ENSP]三层交换和ARP的工作原理

weixin_62594100的博客 6411

Python:类方法的例题!

解答题:定义一个Person类, 分别有年龄、性别、姓名等属性,并且有吃饭、睡觉两个方法。再定义一个Student类,继承Person类,重写睡 觉的方法,这个方法既继承了父类睡觉的方法,也包含了自己特有的功能。 #解答 class Person: def init(self , age , sex , name): self.age = age self.sex = sex self.name = name def eat(self): print(‘我正在吃饭!!!’) def sleep(self):

零小唬的博客 2530

保姆级教程:用Adams/Car和Simulink搞定你的第一个整车联合仿真(附模型文件)

本文提供了一份详尽的Adams/Car与Simulink联合仿真教程,涵盖从环境配置到模型导出的全流程。通过实战案例解析,帮助工程师快速掌握多体动力学仿真与控制算法开发的集成技术,特别适合汽车工程领域的初学者。文章还包含常见问题解决方案和性能优化建议,助您高效完成整车联合仿真项目。

weixin_29663861的博客 337

1.定义Person类 属性: 姓名name、性别gender、年龄age、国籍nationality; 方法:吃饭eat、睡觉sleep,工作work。

【代码】1.定义Person类 属性: 姓名name、性别gender、年龄age、国籍nationality;方法:吃饭eat、睡觉sleep,工作work。

weixin_46597615的博客 3422

TMP112/TMP102温度传感器驱动开发与嵌入式实战

数字温度传感器是嵌入式系统环境感知的核心器件,其通过I²C等标准总线实现高精度、低功耗测温。原理上依赖ΔΣ模数转换与二进制补码数据格式,结合寄存器配置实现模式控制、阈值报警与功耗管理。技术价值体现在±0.5°C级精度、1μA级静态电流及SOT-563超小封装带来的系统集成优势。广泛应用于工业MCU热监控、电池物联网终端、医疗电子温度补偿及汽车ECU板级测温等场景。本文围绕TMP112/TMP102展开,深入解析寄存器协议、硬件接口约束、HAL驱动分层设计、FreeRTOS任务调度及生产级校准方法,覆盖从芯片

weixin_35756690的博客 674

【自动驾驶端到端5:VADv2: End-to-End Vectorized Autonomous Driving via Probabilistic Planning】

从大规模人类驾驶演示中学习类人驾驶策略是有希望的。但是,规划的不确定性使得从驾驶演示中提取驾驶知识是有挑战性的。从统计学习的角度来看,动作(包括实际和速度)是高度随机的,受许多无法建模的潜在因素影响。

weixin_40000560的博客 1404

Python的类和对象

类和对象类代表 群体;独享代表 个体;类相当于模板  对象相当于用模板生成的产品。对象 有两部分:1.属性  名字 性别 身高 体重2.方法  sleep eat cry coding类相当于模板,对象相当于用模板生成的产品。#class 类 Poeple 类名 ()里面为继承的对象 #object 对象;物体 object相当于祖类 class People(object): ...

qq_42543312的博客 1563

第十六届蓝桥杯大赛软件赛(编程类)知识点大纲

难度:[1-3]难度:[1-5]难度:[1-3]难度:[2-5]难度:[1-5]

Future_yzx的博客 4113

p设计一个Person类,属性有姓名、年龄、性别,创建方法personInfo,打印输出这个人的信息;创建Student类,继承Person类,属性有学院college,班级Group,重写父类Per

class Person: def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def personInfo(self): print("姓名:",self.name,"年龄:",self.age,"性别:",self.sex) class Student: def __init__(self,college,Group):.

dayichengxuyuan的博客 1万+

网安保研避坑指南:中科院信工所各研究室真实体验与导师选择建议

本文为中科院信工所网络安全保研生提供深度指南,详细解析了信工所六个研究室的研究方向、真实氛围与导师选择策略。文章特别强调,选择导师是决定研究生体验的关键,并提供了针对各研究室的避坑建议与实战调研方法,帮助学生做出明智选择。

weixin_29210727的博客 1583

86、高斯过程:学习、应用与自动相关性确定

本文介绍了高斯过程回归的基本原理及其在实际应用中的关键技术,重点探讨了通过最大化对数似然函数来学习模型超参数的方法,并详细阐述了自动相关性确定(ARD)技术如何用于评估输入变量的重要性。文章涵盖了从协方差函数定义、梯度计算到优化算法的应用流程,并通过流程图和表格形式总结了核心步骤与公式。此外,还讨论了贝叶斯处理方式及异方差问题的建模策略,展示了高斯过程在复杂数据建模中的灵活性与强大能力。

android的专栏 114

python基础与例题

流程控制 if语句 if语句示例: age = 6 if age > 5: print('可以上学了') if-else语句可以产生两个分支,可根据条件表达式的判断结果选择执行哪一个分支。 name = input('请输入用户名:') pwd = input('请输入密码:') if name == 'admin' and pwd == '123': print('登录成功') else: print('输入的用户名和密码有误,请重新输入') input函数接受

victory77的博客 7498

由浅入深理解Latent Diffusion/Stable Diffusion(5):利用预训练模型快速开始自己的科研任务

从零开始训练一个stable diffusion大概需要16万美元和1个月的时间,这对于一般的科研工作者来说难以承受,所以如何利用预训练模型快速开始自己的科研训练是一个非常有价值的问题。这篇博客将演示如何利用预训练模型快速开始自己的科研任务,希望对大家有所帮助!

沉迷单车的追风少年 3369

搬砖8、Python面向对象编程基础

在Python中可以使用class关键字定义类,然后在类中通过之前学习过的函数来定义方法,这样就可以将对象的动态特征描述出来,代码如下所示。# __init__是一个特殊方法用于在创建对象时进行初始化操作# 通过这个方法我们可以为学生对象绑定name和age两个属性print('%s正在学习%s.' % (self.name, course_name))# PEP 8要求标识符的名字用全小写多个单词用下划线连接# 但是部分程序员和公司更倾向于使用驼峰命名法(驼峰标识)

sinat_30943509的博客 1024

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

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Python学习100天第8天之面向对象编程基础

Python学习100天第8天之面向对象编程基础

吴名氏的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Python学习之基础篇8--面向对象编程

暂无

qq_43437111的博客 758

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Python-Day8面向对象编程基础

文章目录面向对象编程基础类和对象定义类访问可见性问题面向对象的支柱练习练习1:定义一个类描述数字时钟练习2:定义一个类描述平面上的点并提供移动点和计算到另一个点距离的方法。练习3 面向对象版本的猜数字游戏 面向对象编程基础 活在当下的程序员应该都听过“面向对象编程”一词,也经常有人问能不能用一句话解释下什么是“面向对象编程”,我们先来看看比较正式的说法。 把一组数据结构和处理它们的方法组成对象(o...

王大阳的博客 317

Python 100天练习 — Day 8 面向对象编程基础

本文以GitHub上100天python从新手到大师为素材,规划为约100天的练习,每次的学习和总结均发在这里。有错误的地方还请朋友们指正。 什么是面向对象编程 根据我粗浅的理解,面向对象编程"把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(s...

iasime的博客 364

【Python100天学习笔记】Day8 面向对象编程基础

面向对象编程基础 活在当下的程序员应该都听过"面向对象编程"一词,也经常有人问能不能用一句话解释下什么是"面向对象编程",我们先来看看比较正式的说法。 "把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。" 这样一说是不是更不明

码农-Vax天道的时间宝藏 945

Python 百天读书笔记 | 面向对象编程基础 8day

活在当下的程序员应该都听过"面向对象编程"一词,也经常有人问能不能用一句话解释下什么是"面向对象编程",我们先来看看比较正式的说法。 "把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。" 这样一说是不是更不明白了。所以我们还是

@范恒宾的博客 422

Python8️⃣:0小白基础之——Python 面向对象编程(下篇)

1、 创建抽象方法 2、 检查属性取值 3、 给类添加属性 4、 控制随意添加属性 5、 链式调用

博樽 498

Python学习笔记8——面向对象编程基础

Python学习笔记8——面向对象编程基础

m0_65036580的博客 201

Python 基础教程(八):8. 面向对象编程(OOP)

定义在 __init__() 中,通过 self.属性名 创建,属于每个对象自身。

univerbright的博客 857

Python100Days学习笔记---Day8面向对象编程基础

面向对象编程基础 活在当下的程序员应该都听过"面向对象编程"一词,也经常有人问能不能用一句话解释下什么是"面向对象编程",我们先来看看比较正式的说法。 “把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(gene...

迷途可达C的博客 467

廖雪峰python3.6教程笔记8-Python基础之面向对象编程

面向过程编程:把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。面向对象编程:把计算机程序视为一组对象的集合,把对象作为程序的基本单元,一个对象包含了数据和操作数据的方法。而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。在Python...

zyc_love_study的博客 445

Python每日练习之面向对象编程基础(day~8)

面向对象版本的猜数字游戏 from random import randint class GuessGame(object): def __index__(self): self._answer = None self._counter = None self._hint = None def reset(self): self._answer = randint(1,100) self._counter.

wangkuangood3200的专栏 208
上一篇: Python基础 - 7.函数
下一篇: Python基础 - 9.面向对象提高
idsof
博客等级 码龄21年 9粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值