三、对象到底如何创建

三对象创建与回收 创建对象流程 一个对象的创建过程一般如下: 首先是代码执行到new关键词,于是根据new后面的参数到常量池总定位该类的符号引用。 如果没有找到这个符号引用,说明类还没被加载,那么进行类的加载、连接和初始化。 然后jvm为实例在堆中分配内存,并把该内存空间都初始化为0值。 初始化后,jvm会进行一些必要的设置,如,把这个对象是哪个类的实例、在GC中的分代年龄信息放到对象头中。 通过构造函数对该对象进行初始化。 为实例分配内存 在堆中给实例分配内存的方式有两种:指针碰撞和空闲列表。具体使用哪一种,就要 阅读详情

一、二 文中知道,无论PyObject还是PyXXXObject,都包含有那么几样东西。

具体举个例子来说,PyIntObject里面有三东西:

int ob_refcnt;//引用计数
struct _typeobject *ob_type; //一堆信息
long ob_ival; //值

只要把这三个要素构成了,不就生成一个基本的"int"了??是不是??

故在intobject.c中有如下代码出现。PyTypeObject就是_typeobject。

PyTypeObject PyInt_Type = {
    PyVarObject_HEAD_INIT(&PyType_Type, 0)
    "int",
    sizeof(PyIntObject),
    0,
    (destructor)int_dealloc,                    /* tp_dealloc */
    (printfunc)int_print,                       /* tp_print */
    0,                                          /* tp_getattr */
    0,                                          /* tp_setattr */
    (cmpfunc)int_compare,                       /* tp_compare */
    (reprfunc)int_to_decimal_string,            /* tp_repr */
    &int_as_number,                             /* tp_as_number */
    0,                                          /* tp_as_sequence */
    0,                                          /* tp_as_mapping */
    (hashfunc)int_hash,                         /* tp_hash */
    0,                                          /* tp_call */
    (reprfunc)int_to_decimal_string,            /* tp_str */
    PyObject_GenericGetAttr,                    /* tp_getattro */
    0,                                          /* tp_setattro */
    0,                                          /* tp_as_buffer */
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES |
        Py_TPFLAGS_BASETYPE | Py_TPFLAGS_INT_SUBCLASS,          /* tp_flags */
    int_doc,                                    /* tp_doc */
    0,                                          /* tp_traverse */
    0,                                          /* tp_clear */
    0,                                          /* tp_richcompare */
    0,                                          /* tp_weaklistoffset */
    0,                                          /* tp_iter */
    0,                                          /* tp_iternext */
    int_methods,                                /* tp_methods */
    0,                                          /* tp_members */
    int_getset,                                 /* tp_getset */
    0,                                          /* tp_base */
    0,                                          /* tp_dict */
    0,                                          /* tp_descr_get */
    0,                                          /* tp_descr_set */
    0,                                          /* tp_dictoffset */
    0,                                          /* tp_init */
    0,                                          /* tp_alloc */
    int_new,                                    /* tp_new */
    (freefunc)int_free,                         /* tp_free */
};

总结:在XXXobject.c中,通过声明定义变量PyXXX_Type(PyTypeObject类型的)创建了一个XXX对象。

创建过程会调用一系列函数,具体过程是:tp_new(C++中的new),设置sizeof(PyIntObject),tp_init(视为类的构造函数)

稳扎稳打JavaScript(三)——创建对象的几种方式 有了前面两篇文章的基础后,我们来谈一谈在JS中创建对象的几种方式。 建议大家先预习下先前的两篇博客: 稳扎稳打JavaScript(一)——作用域链 稳扎稳打JavaScript(二)——图解对象内存模型在JS中,创建对象的方式有很多,而且各有千秋,我们需要根据实际的业务需求选择不同的方式。1. 工厂模式这是创建对象最为简单的方式。1.1. 定义方式工厂模式的思想是:将对象构建的过程封装在一个 阅读详情

相关推荐

JVM(三)-对象的创建

文章目录对象的创建过程对象在内存中的存储布局虚拟机配置普通对象数组对象对象的大小对象头具体内容对象的定位对象的分配JVM 的运行区和指令集JVM Runtime Data Area指令集栈帧的详细解释例一例二例三 对象的创建过程 类的初始化:class文件加载到内存后,对class文件进行校验,对类的静态变量赋默认值以及初始值,执行静态语句块。接下来就是对象的初始化: 申请对象内存 成员变量赋默认值 调用构造方法 成员变量顺序赋初始值 执行构造方法语句:如果继承了父类的话,调用su

fanfanfan的博客 209

python编译成class_Python虚拟机类机制之自定义class(四)

用户自定义class在本章中,我们将研究对用户自定义class的剖析,在demo1.py中,我们将研究单个class的实现,所以在这里并没有关于继承及多态的讨论。然而在demo1.py中,我们看到了许多类的内容,其中包括类的定义、类的构造函数、对象的实例化、类成员函数的调用等demo1.pyclass A(object):name = "Python"def __init__(self):prin...

weixin_32685111的博客 533

云安全技术——搭建VPN

VPN(Virtual Private Network)是一种可以在公共网络上建立安全连接的技术。VPN是实现保密通信的基本手段,在windows系统上,可以直接进行VPN服务的搭建。1.VPN的工作原理:通过使用加密协议和认证机制,将本地计算机和远程服务器之间的通信加密和保护。2.VPN的分类:根据不同的方式和用途,VPN可以分为不同类型,例如远程访问VPN、站点到站点VPN等。3.VPN的优势:VPN可以带来许多好处,如提高数据安全性、隐藏真实IP地址、突破地理限制等。4.

qq_53142796的博客 3万+

Python C-API 对象分配

在 Python 中,使用 C-API 进行对象分配时,需要考虑 tp_* 方法的使用方式。这些方法用于创建和销毁对象,包括 tp_new、tp_init 和 tp_alloc 用于创建,而 tp_del、tp_free 和 tp_dealloc 用于销毁。而在 C++ 中,可以使用 new 来分配和构造对象,同时使用 delete 来析构和释放对象。

D0126_的博客 563

String+CytoScape构建PPI网络

1.下载CytoScape Cytoscape是一款专业强大好用的物生信息分析软件,主要达用于专业的研究人员使用,软件主要适用于整合模块化网络和生物科学联系网络图的绘制,支持多种文件格式,导入后就可以直接进行编辑或者分析等操作了,除此之外,软件还提供了强大的编辑工具,支持添加相应的注释信息,软件基于java环境组件打造。 下载地址:https://cytoscape.org/ 因为软件基于java...

xiaobai1_1的博客 1万+

AppFlow实战:零代码将Dify接入企业微信的完整指南

本文提供了一份零代码将Dify AI应用接入企业微信的完整实战指南。通过使用阿里云AppFlow作为无代码连接器,详细讲解了从获取Dify API密钥、创建企业微信应用到配置自动化流程的全过程,帮助团队快速将AI能力无缝融入日常协作,大幅提升工作效率。

php55的博客 808

Python & C/C++联合编程实战

一 环境准备 和Python语法快速入门二 Python CTypes访问C/C++动态链接库三 Python源码跨平台的编译四 Python的C/C++扩展库_模块、函数、类扩展五 Python的多线程GIL及在web中调用ffmpeg扩展示例六 Python虚拟机定制-使用c++调用python七 基于python_qt_ffmpeg的视频播放项目示例

在Unity3d使用yolov8的onnx模型

输出OUTPUTS是float32[1,35,8400],表示它会输出一个大小为[1, 35, 8400]的浮点数张量。这个输出张量的维度表示了检测到的目标的数量、每个目标的预测参数以及网格单元的数量。输出张量的第一个维度1表示检测到的目标数量。每个目标由35个值组成,表示目标的类别、置信度、边界框的坐标及10个特定点的位置。要取得8400个数据中置信度最高的数据,然后获取该数据其他channel的数据。运行结果:(蓝色是检测手的边框,红点是自定义的点),其中的四个数字分别表示不同的维度。

shenqingyu0605202324的博客 5603

《Python源码剖析》之 Python内建对象

Python的实现语言是 ANSI C(标准C语言)。 一、对象头部 1、概述 在Python中,所有的东西都是对象。Python的对象都包含一些相同的内容,这些内容在PyObject中定义,PyObject是整个Python对象机制的核心。 [object.h] typedef struct _object{ PyObject_HEAD //对象头 } PyObject; 宏PyObject_HEAD的实现如下: /* 定义对象间的双向链表指针,这个不用管,后面会讲到 */ #ifdef Py_T

Mou_Yang的博客 1428

【用unity实现100个游戏之7】实现一个类《杀戮尖塔》的卡牌回合制游戏(附项目源码)

【用unity实现100个游戏之7】实现一个类《杀戮尖塔》的卡牌回合制游戏(附项目源码)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

python实现Markowitz模型 (附完整源码)

python实现Markowitz模型 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 407

创建一个电脑对象,该对象要有颜色,重量,品牌,型号,可以看电影,听音乐,打游戏和敲代码

三种创建方法: 字面量 var obj = { clr: 'pink', heit: '2.5kg', tit: 'DELL', type: 'win10', fn: function () { console.log('看电影,听音乐,打游戏,敲代码'); } } console.log(obj

m0_59030524的博客 6147

几种负载均衡策略(DNS、NAT、重定向、反向代理)

摘要:本文对比了四种负载均衡技术:DNS负载均衡通过域名解析分发IP,用户直连服务器;NAT负载均衡通过VIP转发流量,所有流量经过负载均衡器;HTTP重定向通过302跳转实现分流;反向代理则隐藏后端服务器,统一转发请求。DNS简单但调度不精准,NAT精准但有带宽瓶颈,HTTP重定向延迟高,反向代理性能好但需专用设备。适用场景各异,DNS适合异地分流,NAT适合内网集群,HTTP重定向适合简单分流,反向代理适合高并发场景。核心区别在于层级(3层/7层)和流量走向(直连/中转)。

echo的博客 73

三、JVM之对象的创建

上篇博文中已经介绍过了jvm内存的概况,接下来我们从jvm的角度来重新来认识一下Java对象是如何创建。 Java是一门面向对象的语言,在Java程序运行的时候无时无刻都有对象的产生。在 语言方面 ,创建一个对象仅仅是一个new关键字而已。那么在 虚拟机中 ,对象(仅指普通对象,不包括数组和Class对象等)的创建又是一个怎么样的过程呢? 一、 类加载 虚拟机遇到一条new指令时,首先将...

栋先生 748

美特CRM mcc_login.jsp存在SQL注入漏洞

MetaCRM 是一种现代化的客户关系管理(CRM)平台,旨在通过集成和自动化的方式帮助企业管理与客户的关系,提高销售和服务效率。MetaCRM 的功能和特性通常涵盖了多个领域,包括销售、营销、客户服务、数据分析和自动化工具。

缘梦未来的博客 808

IDEA的使用指南

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

创建对象三步骤

创建对象三步骤 开辟空间 初始化对象信息 返回对象的地址给引用

SIMBA1949的博客 1580

深度学习工具包 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")

js创建对象 三 自定义构建函数创建对象

&lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt;   &lt;meta charset="UTF-8"&gt;   &lt;title&gt;$永远的24k纯帅$&lt;/title&gt;   &lt;script&gt;     //自定义构造函数创建对象,我要自己定义一个构造函数,自定

qq_34412985的博客 398

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

每日三问之javascript面向对象之创建对象

javascript面向对象 面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可 以创建任意多个具有相同属性和方法的对象。 理解对象 创建自定义对象的最简单方式就是创建一个 Object 的实例,然后再为它添加属性和方法。 var person = new Object(); person.name = "Nicholas"; person.age = 29; person.job = "Software Engineer"..

君子不器 440

java基础三(认识面向对象以及对象的创建)

1.面向对象和面向过程区别 耦合度越高,扩展力越差(集成显卡,计算机显卡不是独立的,是集成到主板的) 耦合度低导致扩展能力强(灯泡和灯口关系,螺栓螺母关系) 螺栓螺母耦合度低,因为螺栓螺母可以拧开 螺栓螺母拧在一起,再加焊条,耦合度就高了 面向过程类似集成显卡,显卡坏主板坏 面向对象类似独立显卡,显卡坏了换一个显卡就行 小型项目或者功能,采用面向过程,效率高,不需要对象的提取,模型的建立 面向对象就是将现实世界分割成不同的单元,然后每一个单元都实现成对象,给一个环境然后驱动一下, 让各个单元协作起来形成一个

qq_36697196的博客 201

Numpy系统学习(三)创建Ndarray数组对象

学习创建Numpy数组的各种各样的函数方法

专注于人工智能的算法与应用 2720

Unity3D入门(三):创建对象

比如有以下场景,飞机发射子弹,这个子弹就是被创建的对象 C#程序中创建对象 习惯C#的都知道,我们使用一个new就可以创建一个类、结构,称之为对象。 Hero hero=new Hero(); U3D中创建对象 创建对象是要用静态函数 Instantiate  :public static Object Instantiate(Object original, Vec

呆子罗 1万+

三。对象创建(ObCreateObject)和对象删除(ObDereferenceObject、ObpRemoveObjectRoutine)

三。对象创建(ObCreateObject)和对象删除(ObDereferenceObject、ObpRemoveObjectRoutine)

求索 9569

JavaScript(三)——DOM操作之如何创建DOM对象

前言: 上篇文章大概说了一下DOM,但是还不是很了解,这里在说说。 一、什么是DOM? DOM是英文Document Object Model的缩写,即文档对象模型。它是一种跨平台的、独立于编程语言的API,它把HTML、XHTML或XML文档当作一个树结构,而每个节点视为一个对象,这些对象可以被编程语言操作,进而改变文档的结构,映射到文档的显示。相信学习过BS的人都知道,对HTML应用很广...

似水流年,是谁苍白了等待 1663

java反射三:获取Class对象的3种方法与创建对象

1、获取方法 第一种方法 调用某个对象的getClass()方法。 Student s=new Student(); Class clazz=s.getClass(); 第二种方法 调用某个类的 class 属性来获取该类对应的 Class 对象 Class clazz=Student.class; 第三种方法 使用 Class 类中的 forName()静态方法,此种方法最安全、性能最好。 Class clazz=Class.forName("类的全路径"); //推荐使..

春风化雨 4657

笔记三:javaScript&Java对象创建过程

个人理理JS和Java对象创建的大体过程一.JavaScript对象过程function Dog(){    this.i=0;}Dog.prototype.method = function(){}var obj1 = new Dog();1)new 创建一个空对象;2)将创建的对象的原型引用指向Dog原形3)执行Dog()构造函数,将this指向应该对象4)返回该对象二.Java对象创建过程A a = new A();1)加载A的父类,A类2)分配父类,子类A的静态属性,静态方法3)分配内存(父类,子类

hhw2000的专栏 353
上一篇: 二、再看看不是PyObject的PyXXXObject
下一篇: 四、再谈PyTypeObject
debugm
博客等级 码龄16年 13粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值