python之设计模式

Python 中最简最好的设计模式 作为这么一门有前途也有钱途的语言,还有什么理由不去学习和掌握呢? 阅读详情

一、什么是设计模式

总结:

二、单例模式

代码演示:

在单例模式_test.py文件中:

class StrTool:
    pass

str_tool=StrTool()

在另一个文件中导入单例对象:

from 单例模式_test import str_tool

s1=str_tool
s2=str_tool

print(id(s1))
print(id(s2))

运行结果:

总结:

三、工厂模式

代码演示:
class Person:
    pass

class Teacher(Person):
    pass

class Student(Person):
    pass

class Worker(Person):
    pass

class PersonFactory:
    def get_person(self,type):
        if type=="t":
            return Teacher()
        elif type=="s":
            return Student()
        else:
            return Worker()


pf=PersonFactory()
student=pf.get_person("s")
teacher=pf.get_person("t")
worker=pf.get_person("w")

print(student)
print(teacher)
print(worker)

运行结果:

总结:

【Python】Python设计模式 Python语言本身的设计,就已经蕴含了许多设计模式的思想。在我们学习具体模式之前,认识到这些语言层面的“内建模式”至关重要,因为它们往往是解决特定问题的首选方案。装饰器 (Decorators): 这是对经典装饰器模式 (Decorator Pattern) 和 代理模式 (Proxy Pattern) 的直接语法级支持。它允许我们以一种声明式、非侵入的方式,为函数或类附加额外的职责,如日志记录、性能测试、事务处理、权限校验等。上下文管理器 (Context Managers): 语句和、方法,是资源管理 阅读详情

相关推荐

从原理到实践:手把手教你用XY2-100协议控制激光振镜(含引脚定义图)

本文详细解析了XY2-100协议在激光振镜控制中的应用,从硬件接口定义到时序分析,再到Verilog硬件逻辑实现,提供了完整的开发指南。通过实际案例和优化策略,帮助开发者快速掌握高精度激光振镜控制技术,提升加工质量和效率。

weixin_30505225的博客 403

python与设计模式_python_design_pattern

python 与设计模式zarkpy里面运用了很多设计模式,以前一直很费解python是怎么应用设计模式的,他没有接口,也不是编译行的语言。直到sdjl(zarkpy的原创者)对我说:设计模式只是参考,重要的是自己写一些东西。学习的过程中有一些思考,因此记录在这里。这些原理性的东西也可以运用到别的一些动态语言中去,javascript则有一本《JavaScript设计模式》可以参考。###此处之后...

weixin_39943101的博客 204

[QDS]从零开始,写第一个Qt Design Studio到程序调用的项目

最近在使用Qt Design Studio进行开发,但是简中网上要不就是只搜得到Qt Designer(Qt Creator内部库),要不就只搜得到一点营销号不知道从哪里搬来的账号,鉴于Qt Design Studio是一个这么强大的软件,自然是需要来进行一下小小的实践的。所以开了这篇文章,方便没有使用过Qt Design Studio 和 QML的开发者也可以快速上手QDS(Qt Design Studio)。在本文中,你将学会如何使用QDS开发一个简单的QML程序,与你的C++后端代码进行交流。

Andius的博客 8215

python的设计模式

Python设计模式系列之一: 用模式改善软件设计 肖文鹏 (xiaowp@263.net), 北京理工大学计算机系硕士研究生 简介: 软件设计大师总是要比初学者更加清楚该如何设计软件,因为他们手中掌握着设计模式这一法宝。作为一种高级的软件复用形式,设计模式是众多优秀软件设计师集体智慧的结晶,能够很好地指导软件设计过程。本系列文章介绍如何在用Python开发

uestcyao的专栏 2772

Docker部署 SRS rtmp/flv流媒体服务器

SRS(Simple Realtime Server)是一款开源的流媒体服务器,具有高性能、高可靠性、高灵活性的特点,能够支持直播、点播、转码等多种流媒体应用场景。SRS 不仅提供了流媒体服务器,还提供了适用于多种平台的客户端 SDK 和在线转码等辅助服务,是一款十分强大的流媒体解决方案。

m0_56659620的博客 4869

MATLAB 论文复现——面向紧急需求响应的规模化灵活资源负荷管理快速决策方法

其次,对灵活资源参与EDR的功率分配模型进行了建模,并提出了基于分层分布式共识算法的快速决策方法,对功率分配模型进行快速求解,以满足EDR实时性的需求,在保证较高精度的前提下提高了决策速度。[1]孔祥玉,杨至端,孙裕策,等.面向紧急需求响应的规模化灵活资源负荷管理快速决策方法[J/OL].电力系统自动化,1-13[2024-07-29].http://kns.cnki.net/kcms/detail/32.1180.TP.20240709.1843.002.html.关键词: 规模化灵活资源;

sjr1478的博客 374

[DesignPattern]Observer Pattern (Python)

周五听峰哥说java的设计模式,于是看看python的实现,理解下。 #!/usr/bin/env python # -*- coding: utf-8 -*- # observer_simple.py # Date: 2014-03-16 # CopyRight: orangleliu@gmail.com # Lisence: BSD # tips:简单实现观察者模式 class Sub

orangleliu 笔记本 1895

细说VLAN之untag和tag

一、拓扑图 先给出上面拓扑图的结论,后面再详细讲解: 结论:只有PC1与PC4之间能相互通信,除此之外,所有PC之间均不能通信,比如PC1与PC3不能建立通信。 针对Ping命令的一个知识: 要想ping通某台主机,必须满足两个条件: 1,源主机的ICMP请求包必须能达到目的主机。 2,目的主机的ICMP应答包必须能回到源主机。 二、理论基础 端口的出...

NoobMaster的博客 3万+

python实践_python实践设计模式

学习python有一段时间,之前就是看看书,最后发现只有实践才能真正学到东西,只有在解决问题中才能真正掌握。之前大牛也有用python实现各种设计模式的,我自己参考之前在学习用C#实现设计模式的经历,也想把23种模式逐一实践,从网上查了一些资料,才明白python虽然是面向对象的,但是和C#,java语言不太一样。影响设计方法不一样有以下几点:1.python没有接口Interface的类型。2....

weixin_39970994的博客 201

EndNote X9 参考文献附录列表 格式调整

EndNote X9 插入参考文献常见问题总结

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2570

图神经网络实战(21)——图神经网络的可解释性

在本节中,我们探讨了应用于图神经网络 (Graph Neural Networks, GNN) 的可解释性人工智能 (Explainable Artificial Intelligence, XAI) 技术。可解释性是许多领域的关键要素,可以帮助我们建立更好的模型。我们介绍了不同的局部解释技术,并重点讨论了 GNNExplainer (基于扰动的方法),在图分类任务中应用 GNNExplainer。

盼小辉丶的博客 9596

python用设计模式吗_为什么Python不用设计模式?

为什么Python不用设计模式?

weixin_39532352的博客 287

YOLOv10改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度

本文记录的是基于蒙特卡罗注意力(MCAttn)模块的YOLOv10目标检测改进方法研究。利用提高的跨尺度特征提取能力,使模型能够更好地传递和融合提取的多尺度特征,提高对小目标的关注度。Exploiting Scale-Variant Attention for Segmenting Small Medical Objects使用一种基于随机采样的池化操作来生成尺度无关的注意力图。它从三个不同尺度(3×33×33×3、2×22×22×2和1×11×11×1,即池化张量)中随机选择一个1×11×11×1注意力图

Limiiiing的博客 2189

Python 设计模式

本文概述了Python中的设计模式,分为创建型、结构型和行为型三大类,共23种模式。重点介绍了单例模式、工厂方法、观察者模式和装饰器模式的Python实现示例,并指出Python的动态特性简化了部分模式的实现。文章强调合理使用设计模式,避免过度设计,并推荐了相关学习资源。掌握这些模式有助于编写更优雅、可维护的Python代码,尤其适用于大型项目开发。

likuoelie的博客 1321

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Python设计模式实践

设计模式是软件开发中解决常见问题的可复用方案,在Python中应用设计模式能够显著提升代码的可维护性和扩展性。常见的创建型模式如工厂模式和单例模式能够优化对象创建过程,结构型模式如适配器模式和装饰器模式可以改善代码结构,而行为型模式如观察者模式和策略模式则能更好地组织对象间的交互逻辑。在Python中,利用unittest和pytest等测试框架,结合适当的设计模式,可以构建出健壮且易于测试的代码基。耦合度的降低、内聚性的提高以及适当的抽象层次都是设计模式带来的好处,这些都能反映在代码质量指标中。

fydhjc的博客 1591

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

python算法基础设计模式,python常见的设计模式

Python设计模式主要分为三大类:创建型模式、结构型模式、行为型模式;三 大类中又被细分为23种设计模式,以下这几种是最常见的。单例模式:是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个是实例时,单例对象就能派上用场。单例对象的要点有三个:一是某个类只能有一个实例;二是它必须自行创建整个实例,三是它必须自行向整个系统提供这个实例。工厂模式:提供一个创建对象的接口,不像客户端暴露创建对象的过程,使用一个公共的接口来创建对象,可以分为三种:简单

wenangou的博客 1790

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

关于Python设计模式的一些事情,设计模式是否真能帮你解决什么问题?

设计模式是一种用于解决软件设计问题的经验总结(解决问题的一种方法),它提供了一套可重用的解决方案,可以帮助我们更好地组织和管理代码,提高代码的可维护性、可扩展性和可重用性。设计模式是在软件开发过程中积累的一系列最佳实践和设计原则的体现。 Python一切皆对象,在Python中,所有的数据类型都是对象,包括整数、浮点数、字符串、列表、字典、集合等等。对象是Python中最基本的数据单位,每个对象都有自己的属性和方法。

SteveRocket's-Blog 276

从生活中领悟设计模式(Python)

课程介绍 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、无数工程师实践的代码设计经验的总结,它是面向对象思想的高度提炼和模板化。使用设计模式将会让代码具有更高的可重用性、更好的灵活性和可拓展性、更容易阅读和理解。 程序不应只是冷冰冰的代码,更应赋予它生活的乐趣和特殊的意义。本课程内容将会从生活的角度,在生活的每一个细节和故事中解读一个个设计模式。力求用最通俗的语言阐述最难...

GitChat 8073

python设计模式有哪些_Python 中最简最好的设计模式

大势所趋,Python 已然成风C语言诞生于1972年,确随着 Unix 的诞生才深深植根于各大操作系统;C++诞生于1983年,确因微软的可视化桌面操作系统才得以广泛传播;Java 诞生于1995年,确因互联网的迅速崛起才变得家喻户晓;Python 诞生于1991年,而下一场技术革命已然开始,AI 时代已然成风。在 AI 领域中已经被广泛使用的 Python 必将成为下一个时代的第一开发语言!最...

weixin_39876282的博客 116

Python的23种设计模式

设计模式是面对各种问题进行提炼和抽象而形成的解决方案。这些设计方案是前人不断试验,考虑了封装性、复用性、效率、可修改、可移植等各种因素的高度总结。它不限于一种特定的语言,它是一种解决问题的思想和方法。

malingyu的专栏 1228

精通python设计模式-Python设计模式

Python Design Pattern一、OPP七大设计原则1.单一职责原则(Single Responsiblity Principle, SRP)一个类负责一项职责。2.开闭原则(Open Closed Principle, OCP)一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。3.里氏替换原则(Liskov Substitution Principle, LSP)继承与派生的规...

weixin_37988176的博客 264

python常用设计模式

python常用设计模式一、设计模式基础1. 基础知识2. 面向对象设计SOLID原则3. 设计模式分类4. 简单工厂模式(Simple Factory Pattern)二、创建型模式(5种)1. 工厂方法模式(Factory Pattern)2. 抽象工厂模式(Abstract Factory Pattern)3. 建造者模式(Builder Pattern)4. 单例模式(Singleton ...

冠军阿狗的博客 1121

了解 Python 设计模式

设计模式是解决众所周知问题的常用方法。Python开发者定义的设计模式的基础有两个主要原则:编程到接口而不是实现。优先选择对象组合而不是继承。让我们从 Python 程序员的角度仔细看看这两个原则。编程到接口名 Program to InterfacePython有个“Duck Typing" 鸭子类型的故事,Duck Typing 是一种编程风格,决定一个对象是否有正确的接口,关注点在于它的方法或属性,而不是它的类(“如果它看起来像鸭子,像鸭子一样嘎嘎叫,那么它一定是鸭子。”)。

Python技术探索 526

常用设计模式Python实现

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 代码查看:https://github.com/nonpricklycactus/Design-Pattern 一、设计模式分类 经典的《设计模式》一书归纳出23种设计模式,这23种模式又可...

nonpricklycactus的博客 6732

python 设计模式_python设计模式 第2版 PDF 下载

相关截图:资料简介:设计模式是构建大型软件系统zui强大的方法之一,优化软件架构和设计已经逐渐成为软件开发和维护过程中的一个重要课题。 本书通过11章内容,全面揭示有关设计模式的内容,并结合Python语言进行示例化的解析。全书囊括单例设计模式、工厂模式、门面模式、代理模式、观察者模式、命令模式、模板方法模式、复合模式、状态设计模式以及反模式等多种设计模式。 本书适合那些关注软件设计原则,并想将y...

weixin_39772566的博客 935

编程故事之python的设计模式

在遥远的Python王国,有一位少年,非常热爱编程,他的父母想给他报一个班,问了万能的朋友圈以后,发现大家都推荐同一个老师,人称吉先生。 于是他的父母毫不犹豫就交了一笔不菲的学费,每周六日下午让孩子去学习。 少年学习非常刻苦,很快就学会了Python语法、工具和框架。 老师像是见到了可以雕刻的美玉,倾囊相授,告诉他不仅要把代码写对,还要让代码漂亮、优雅、可读、可维护。 少年又学会...

java276582434的博客 323
上一篇: python之装饰器
下一篇: python之多线程
python_198
博客等级 码龄3年 359粉丝 112原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

python_198

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

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

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

打赏作者

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

抵扣说明:

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

余额充值