python元类

Python元类详解 Python从设计之初就是一门面向对象的语言,它有一个重要的概念,即一切皆对象。Python与java的区别:Java虽然也是面向对象编程的语言,但是血统没有Python纯正。比如Java的八种基本数据类型之一int,在持久化的时候,就需要包装成Integer类对象。但是在python中,一切皆对象。数字、字符串、元组、列表、字典、函数、方法、类、模块等等都是对象,包括你的代码。MetaClass元类,本质也是一个类,但和普通类的用法不同,它可以对类内部的定义(包括类属性和类方法)进行动态的修改。 阅读详情


我们class定义一个类,实例化产生对象:

class People:
    pass


p1 = People()

# python 一切皆对象,p1是People实例化的,那People这个类也是对象,People是哪个类产生的?
print(type(p1))

# <class '__main__.People'>

print(type(People))

# <class 'type'>

type函数可以用来看产生对象的类,可以看到我们class定义的类默认是type这个类实例化的对象

产生类的两种方式

class定义类

class Chinese:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def talk(self):
        print('talking')

# print(Chinese)
# <class '__main__.Chinese'>

调用元类type产生

class_name = 'Chinese'  # 类名
class_bases = (object,)  # 继承父类
class_body = '''  
country = 'china'
def __init__(self, name, age):
    self.name = name
    self.age = age
def talk(self):
    print('talking')

'''  # 类的内容
class_dict = {}

exec(class_body,globals(),class_dict)  # 为类产生局部名称空间

# print(class_dict)
# {'country': 'china', '__init__': <function __init__ at 0x000001ABF45FC1E0>, 'talk': <function talk at 0x000001ABF65D8BF8>}


C = type(class_name,class_bases,class_dict)  # 调用type产生类

# print(C)
# <class '__main__.Chinese'>

自定义元类

自定义元类控制类的创建

自定义元类其实就是创建一个继承元类type 的类,以此作为元类实例化创建类。
之前我们看到调用type元类传入了三个参数,
C = type(class_name,class_bases,class_dict)
那我们自定义元类之后也要传入这三个参数,不用管内部怎么处理,继承元类type的功能就行。我们可以添加条件控制以此为元类创建的类的行为。

# C = type(class_name,class_bases,class_dict)

# 创建一个继承元类type的类
class Test(type):  # 继承元类type的属性
    def __init__(self, class_name, class_bases, class_dict):
        if not class_name.istitle():  # 加入条件
            raise TypeError('首字母大写')

        super(Test, self).__init__(class_name, class_bases, class_dict)


class Chinese(metaclass=Test):
    def __init__(self, name,age):
        self.name = name
        self.age = age

    def talk(self):
        print('talking')


print(Chinese)
# <class '__main__.Chinese'>



class people(metaclass=Test):
    pass


print(people)
# TypeError: 首字母大写

或者直接调用type__new__方法:

class Test(type):  # 继承元类type的属性
    def __new__(cls, *args, **kwargs):
        return type.__new__(cls,*args,**kwargs)


class Chinese(metaclass=Test):
    def __init__(self, name,age):
        self.name = name
        self.age = age

    def talk(self):
        print('talking')


# print(Chinese)
# <class '__main__.Chinese'>

自定义元类控制类的实例化

class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __call__(self, *args, **kwargs):
        print(self,args,kwargs)


p1 = People('小明', 18)
p1('a','b',num='18')
# <__main__.People object at 0x000001DD97AD9208> ('a', 'b')

如果我们定义一个类,类中有__call__方法,那实例化产生的对象可以调用 p1(‘a’,‘b’,num=‘18’),
同样的,反之推导,如果我们把类People看作是元类产生的对象,既然我们可以调用People(‘小明’, 18)那么元类中应该有__call__方法,既然如此,我们可以看作调用People(‘小明’, 18)实例化产生的对象p1就可以看作是元类中调用__call__方法的返回值

class Test(type):
    def __init__(self, class_name, class_bases, class_dict):
        super(Test,self).__init__(class_name, class_bases, class_dict)

    def __call__(self, *args, **kwargs):  # 实例化时的属性值,self = People,参数:'小明',18
        obj = object.__new__(self)  # 产生空对象obj
        self.__init__(obj, *args, **kwargs)  # self= People, 转到People.__init__(self, name, age):
        return obj  # 返回obj


class People(object, metaclass=Test):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def run(self):
        print('running')

p1 = People('小明',18)

示例

比如要求实例化时参数必须用关键字形式,自定义产生的属性必须大写:

class Test(type):
    def __new__(cls, *args, **kwargs):
        return type.__new__(cls, *args, **kwargs)

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError
        obj = object.__new__(self)

        for k,v in kwargs.items():
            obj.__dict__[k.upper()]=v
        return obj


class People(metaclass=Test):
    def talk(self):
        print('talking')


p1 = People(name='小明')

# print(p1.__dict__)
# {'NAME': '小明'}
BeikeShop跨境电商独立站系统V1.5.0免授权全开源版 BeikeShop 一款开源好用的跨境电商系统,BeikeShop 是基于 Laravel 开发的一款开源商城系统,主要面向外贸/跨境电商行业提供商品管理、订单管理、会员管理、支付、物流、系统管理等功能。BeikeShop商城 Beike多语言商城 多货币商城B2C商城系统 代码100%开源 PHP商城系统 H5/PC商城 跨境电商系统 跨境商城系统 电商商城系统 Laravel 9 框架插件化开发,MVC架构 支持插件市场。Event 机制实现Hook功能,自定义可视化装修。 阅读详情

相关推荐

AES128加密算法开发(含源码)

本文详解了AES128加密算法的原理与C语言实现。AES128是当前广泛使用的对称加密标准,采用128位密钥和10轮变换,具有高安全性和高效性。文章从算法背景、核心概念(混淆与扩散)入手,详细解析了4×4状态矩阵表示、4个核心变换(字节替换、行移位、列混合、轮密钥加)以及密钥扩展过程。特别针对汽车电子应用场景,如ECU通信加密、车钥匙认证等,说明了AES128在资源受限环境中的优势。通过分步图解和原理剖析,帮助开发者深入理解这一加密标准的技术细节与实现方法。

汽车电子软件开发笔记 2917

Python元类应用全攻略:90%开发者忽略的类构造控制术

掌握Python元类控制类的创建过程,深入解析其在框架设计、属性验证与单例模式中的实际应用。通过自定义metaclass实现类行为动态调整,提升代码灵活性与可维护性。核心方法清晰拆解,助你洞悉Python面向对象高级机制,值得收藏。

QuickCode的博客 1000

Linux SMP系统多核启动机制详解

对称多处理(SMP)是现代操作系统支持多核并行计算的基础架构。其核心原理是通过引导处理器(BSP)初始化系统环境后,通过处理器间中断(IPI)机制唤醒应用处理器(AP)。在x86架构中,AP启动时处于实模式,需要特殊的trampoline代码完成保护模式切换和分页设置。这种设计既保证了系统初始化的正确性,又实现了多核并行处理的性能优势。理解SMP启动流程对优化系统启动速度和调试多核问题至关重要,特别是在云计算和嵌入式系统中,高效的SMP初始化能显著提升系统响应能力。本文以Linux内核为例,深入解析了从BS

weixin_35006125的博客 289

Python元类(metaclass)的例子

作者: Eli Bendersky 原文链接:https://eli.thegreenplace.net/2011/08/14/python-metaclasses-by-example Python理直气壮地为自己是一个相对简单明了的语言而骄傲,在其工作及特性中没有藏着太多“魔术”。不过,有时为了使有趣的抽象成为可能,你可以深入Python尘土飞扬与隐晦的角落,找出比平常更神奇的语言构造。M...

wuhui_gdnt的专栏 539

CAD二次开发(C#版):从零搭建开发环境与核心DLL引用指南

本文详细介绍了使用C#进行CAD二次开发的环境搭建与核心DLL引用指南,涵盖Visual Studio配置、AutoCAD插件项目创建、DLL引用技巧及调试方法。通过实战示例和常见问题排查,帮助开发者快速掌握CAD二次开发的核心技术,提升开发效率。

weixin_28837817的博客 728

TSP、MTSP问题遗传算法详细解读及python实现

写在前面 遗传算法是一种求解NPC问题的启发式算法,属于仿生进化算法族的一员。仿生进化算法是受生物行为启发而发明的智能优化算法,往往是人们发现某种生物的个体虽然行为较为简单,但生物集群通过某种原理却能表现出智能行为。于是不同的人研究不同的生物行为原理,受到启发而发明出新的仿生进化算法。比如免疫优化算法,蚁群算法,模拟退火算法等,这些算法以后也会简单介绍。 本文的主题是遗传算法,该算法也是受到生物行为启发。物竞天择,适者生存,优胜劣汰,是该优化算法的核心思想。笔者在业务中需要用到遗传算法求解TSP问题,但是网

weixin_47675950的博客 9306

python元类的使用_python中元类用法实例

本文实例讲述了python中元类用法,分享给大家供大家参考。具体方法分析如下:1.元类(metaclass)是用来创建类的类2.type(object):返回一个对象的类型,与object.__class__的值相同,type(name,bases,dict):创建一个新的type类型,name就是新class的name,值存到__name__属性中,bases是tuple类型,值会存到__bas...

weixin_30424461的博客 369

淘宝电商产品价格官方防爬取采集设计机制,如何破?|淘宝电商API数据采集看完你也会!

然而,随着电子商务的蓬勃发展,涌现出大量的第三方工具和应用,试图通过采集淘宝电商产品价格等信息来进行数据分析和竞争优势的获取。为了维护市场秩序和保护商家权益,淘宝采取了一系列的防爬取设计机制,以阻止非授权的数据采集行为。为了确保数据的准确性和及时性,淘宝采取了多层次的防爬取机制,以限制未经授权的数据采集。其它的情况,比如淘宝首页、淘宝关键词商品搜索结果页面、商品详情页面,都是正常展示,未实现加密;也可以使用【tesseract ocr识别】指令,这个是免费无限使用的;【淘宝商品搜索结果页面-本地截图】

TinagirlAPI的博客 1385

Python 元类

一、元类是什么? 定义理解: Python中一切皆为对象,对象是有类实例化生成; 类也是对象(类对象),生成类对象的类可称之为元类; 所以,元类就是来创建类对象的,可称之为类工厂; type是python内建元类,type是最上层的元类,也可称为一切类对象的元类; 常见对象如str, int等,其__class__属性都是type,class 的__class__ 也是type。 type也可动态创建类 二、元类设置 metaclass 属性 在声明一个类时可以使用 metaclass class F

Keivn_666 1588

使用Python爬虫获取Facebook帖子和评论数据

Web爬虫是用于自动抓取网页数据的程序。它通过发送HTTP请求,获取网页的HTML源代码,再对源代码进行解析,提取所需的内容。爬虫常用于数据收集、信息提取、数据分析等应用。

2201_76125261的博客 1998

卫星轨道坐标转换:轨道六根数到经纬高(经STK验证)

a:半长轴(km)e:偏心率i:轨道倾角(度)Ω:升交点赤经(度)ω:近地点幅角(度)ν:真近点角(度)

weixin_52370774的博客 170

python——元类、元类实现orm

元类 1. 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成立: >>> class ObjectCreator(object): … pass … >>> my_object = ObjectCreator() >>> print(my_object) <__main_...

GC 6794

独立游戏之路:Tap篇 -- 个人开发者上架TapTap步骤和注意事项

作为一名游戏开发者,将自己的独立游戏上架到 TapTap 平台是一个不错的选择。TapTap 是一个拥有大量用户的游戏社区平台,上架游戏可以让更多的玩家发现和体验你的游戏。TapTap 是一个游戏社区平台,用户可以在平台上下载和分享游戏。TapTap 拥有大量的用户,并且用户活跃度高,这为独立游戏开发者提供了一个很好的展示和推广平台。进入TapTap开发者服务后台。

陈言必行 -- Unity游戏开发领域优质博主 6407

Python中的元类

Python中的元类 Python一切皆对象,所以类也是对象。 我们知道,对象是通过类实例化创建出来的。但我们创建类时并没有进行实例化操作,为什么类也是对象呢? 类既然是对象,类肯定是另外某个类的实例。这说明在我们使用class声明一个类的时候Python解释器为我们做了些什么。 一、元类介绍 通过一个类,可以创建无数个实例对象,类就相当于一个生产实例对象的机器,可以不断的生产出实例对象...

weixin_43790276的博客 3915

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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

python元类_Python元类

python元类Welcome to today’s tutorial on python metaclass. We all know that python is an object oriented programming language which means it binds datas with functionalities i.e. class. Before starting...

从零开始的教程世界 211

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Python 中的元类是什么

元类是创建类的“东西”。你定义类是为了创建对象,对吧?但我们了解到 Python 中的类也是对象。那么,元类就是创建这些对象的东西。你已经看到type这是因为type函数实际上是一个元类。type是 Python 在幕后用来创建所有类的元类。现在你可能会想,“为什么它是小写的,而不是Type?嗯,我想这是为了与str(创建字符串对象的类)和int保持一致。在 Python 中,一切,我是说一切,都是对象。这包括整数、字符串、函数和类。所有这些都是对象。那么,任何__class__的。

liluo0815481的博客 991

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

python的元类_Python:细说元类

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。Python:细说元类作者:maSnun,2016年5月3日One of the key features of the Python language is that everything is an object. These objects are instances of classes.Pytho...

weixin_39723678的博客 126

Python的元类

有关于元类方面一些常用知识。

qq_38380338的博客 1148

python中的元类_python中的元类

元类什么是元类我们创建一个类目的是为了创建该类的实例对象,而元类就是用来创建类的。换个理解方式就是,元类就是创建类的类。在python中可以使用type函数创建一个类,参考python中type的用法,用法如下:tpye(name, bases, dict)name 类名bases 父类的元组dict 类的属性方法和值组成的键值对实际上 type() 函数就是一个元类,是python默认用来创建所...

weixin_39704246的博客 73

Python基础:元类

通过上面的介绍,终于模模糊糊的带到元类这里来了。可是我们到现在还不知道元类是什么鬼东西。我们创建类的时候,大多数是为了创建类的实例对象。那么元类呢?元类就是用来创建类的。也可以换个理解方式就是:元类就是类的类。通过上面type()函数的介绍,我们知道可以通过type()实际上type()函数是一个元类。type()就是 Python 在背后用来创建所有类的元类。那么现在我们也可以猜到一下为什么type()函数是 type 而不是 Type呢?

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 887

python元类_Python之元类详细解析

'''1、什么是元类在python中一切皆对象,那么我们用class关键字定义的类本身也是一个对象负责产生该对象的类称之为元类,即元类可以简称为类的类class Foo: # Foo=元类() #一切皆对象,类加括号产生对象pass2、为何要用元类元类是负责产生类的,所以我们学习元类或者自定义元类的目的是为了控制类的产生过程,还可以控制对象的产生过程3、如何用元类'''#1、储备知识...

weixin_39705794的博客 323

python的元类是什么

什么是python元类 类是为了创建对象,元类是为了创建类。 本文主要来自stackoverflow python中的类 在理解元类之前,我们需要掌握 python 中的类。在大多数语言中,类知识描述如何产生对象的代码段。 在python中也是如此: >>> class ObjectCreator(object): ... pass ... >>&g...

weixin_37946237的博客 575

python3元类_Python3 元类

元类exec方法exec()方法可以执行字符串形式的python代码块使用方法exec(object, global=None, local=None)object: 字符串类型的python代码块global: 代表全局名称空间, 必须是字典, 默认为None, 如传参则表明该代码块在全局名称空间中运行local: 代表局部名称空间, 可以是任何映射, 默认为None, 如传参则表明该代码块在局...

weixin_39717825的博客 134

python元类是什么_Python之元类详解

一、引子元类属于Python面向对象编程的深层魔法,99%的人都不得要领,一些自以为搞明白元类的人其实也是自圆其说,点到为止,从队元类的控制上来看就破绽百出,逻辑混乱;二、什么是元类一切源自于一句话:Python中一切皆为对象。让我们先定义一个类,然后逐步分析#!/usr/bin/env python# -*- coding: utf-8 -*-class MyTeacher(object):sc...

weixin_39716417的博客 220
上一篇: python反射
下一篇: python异常处理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值