python之面向对象编程-自定义内置方法定制类的功能,元类

1.内置方法:

        __str__        打印自动触发

        __del__        删除对象之前自动触发

2.用于实例化产生类的类称之为元类

    __call__        调用对象时自动触发

    __new__        新建一个空对象

  __init__           调用类自动触发,初始化独有属性

 

1.__str__方法

    在对象被打印时,自动触发,应该在该方法内采集与对象slef有关的信息,然后拼成字符串返回

        def __str__(self):

               print('====>')

             return '<name:%s age:%s>' %(self.name,self.age)

    obj=People('egon',18)

    print(obj)

 

2.__del__析构方法

    __del__会在对象被删除之前自动触发

 

class People:                                                    

    def __init__(self,name,age):

        self.name=name

        self.age=age

        self.f=open('a.txt','r',encoding='utf-8')

    def __del__(self)                                                             #程序运行完毕,对象自动删除   

        print('==========>')                                           #对象被删除之前自动触发

       # self.f.close    #需要做回收操作系统资源相关的事情

obj=People('egon',18)

del obj

 

3.什么是元类

    在python中一切皆对象,那么我们用class关键字定义的类本身也是一个对象

    负责产生该对象的类称为之为元类,即元类可以简称为类的类

        class Foo:   #Foo=元类()            #把定义的类foo当初个对象来看

            pass

    元类是负责产生类的,所以我们学习元类或自定义元类的目的是为了控制类的产生过程(添加逻辑条件..)

    还可以控制对象的产生过程

 

1.储备知识:内置函数exec用法

    将字符串中的代码提取出来运行一次            

cmd="""

x=1 

y=2 

print('----->')"""

class_dic={}                          #相当于名称空间

exec(cmd,{},class_dic)        #将运行过程中执行的名字都丢在字典里了

print(class_dic)

 

exec用法:模拟类定义阶段造名称空间将类体代码执行过程中产生的名字丢进去

 

2.创建类的方法有两种

    大前提,如果说类也是对象,那么用class关键字创建类的过程也是一个实例化

    该实例化的目的是为了得到一个类,调用的就是元类

    方式1:用默认是元类 type

        

<strong># class People: #People=type(...)
#     country='China'
#     def __init__(self,name,age):
#         self.name=name
#         self.age=age
#
#     def eat(self):
#         print('%s is eating' %self.name)

# print(type(People))            #把people看做对象的话,那么people的类是type type就是默认元类</strong>

  创建类的三个要素:类名,父类,类的 名称空间

    class 就是封装了一个功能

    class_name='People'

    class_bases=(object,)

    class_dic={}

    class_body="""

country='China'
def __init__(self,name,age):
    self.name=name
    self.age=age


def eat(self):
    print('%s is eating' %self.name)

"""

exec(class_body,{},class_dic)

创建类三要素:

class_name

class_bases

class_dic

People1=type(class_name,class_bases,class_dic)              #自己造出一个类

obj=people1(‘egon’,18)

obj.name

方式2:创建自定义的元类

<strong>class Mymeta(type):                      #只要继承了type类才能称之为元类,否者就是一个普通的自定义类

        def __init__(self,class_name,class_bases,class_dic)
            print(self) #现在是People
            print(class_name)
            print(class_bases)
            print(class_dic)
            super(Mymeta,slef),__init__(class_name,class_bases,class_dic) #重用父类的功能

        <span style="color:#ff0000">分析class运行原理</span>

       <span style="color:#ff0000"> 1.拿到一个字符串的类名 class_name='People'</span><span style="color:#ffcc00">
</span>
       <span style="color:#ff0000"> 2.拿到一个类的父类class_bases=(object,)</span>

        <span style="color:#ff0000">3.执行类体代码,拿到一个类的名称空间class_dic={.....}</span>

        <span style="color:#ff0000">4.调用People=type(class_name,class_bases,class_dic)</span>

class People(objeck,emtaclass=Mymate):           <span style="color:#ff0000">#把peopel当做个对象 peopel=Mymeta(类名,父类,类的名称空间)</span>

        country='China'
            def __init__(self,name,age):
                self.name=name
                self.age=age


            def eat(self):
                print('%s is eating' %self.name)


<span style="color:#ff0000"># 应用:自定义元类控制类的产生过程,类的产生过程其实就是元类的调用过程</span></strong>

例:控制元类,添加逻辑条件

<strong>class Mymeta(type):                                         #只有继承了type类才能称之为一个元类,否则就是一个普通的自定义类
    def __init__(self,class_name,class_bases,class_dic):
        if class_dic.get('__doc__') is None or len(class_dic.get('__doc__').strip()) == 0:
            raise TypeError('类中必须有文档注释,并且文档注释不能为空')
        if not class_name.istitle():
            raise TypeError('类名首字母必须大写')
        super(Mymeta,self).__init__(class_name,class_bases,class_dic) #重用父类的功能

class People(object,metaclass=Mymeta): #People=Mymeta('People',(object,),{....})   #把people当做一个对象看待,元类设置有条件,对象必须遵循
    """这是People类"""
    country='China'
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def eat(self):
        print('%s is eating' %self.name)</strong>

 

 

 

__call__ 调用对象时自动触发

 

<strong>#3 储备知识:__call__         调用对象时自动触发
# class Foo:
#     def __call__(self, *args, **kwargs):
#         print(self)
#         print(args)
#         print(kwargs)
#
#
# obj=Foo()
#
# # 要想让obj这个对象变成一个可调用的对象,需要在该对象的类中定义一个方法__call__方法
# # 该方法会在调用对象时自动触发
# obj(1,2,3,x=1,y=2)</strong>

 

# 4、自定义元类来控制类的调用的过程,即类的实例化过程

 

<strong>class Mymeta(type):

    def __call__(self, *args, **kwargs):
        # print(self) # self是People
        # print(args)
        # print(kwargs)
        # return 123

<span style="color:#ff0000">        # 1、先造出一个People的空对象</span>
        obj=self.__new__(self)
       <span style="color:#ff0000"> # 2、为该对空对象初始化独有的属性</span>
        # print(args,kwargs)
        self.__init__(obj,*args,**kwargs)

     <span style="color:#ff0000">   # 3、返回一个初始好的对象</span>
        return obj


class People(object,metaclass=Mymeta): #把peopel看做一个对象 上面描述的就是造出peopel的过程
    country='China'
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def eat(self):
        print('%s is eating' %self.name)

    def __new__(cls, *args, **kwargs):        
        print(cls)
        # cls.__new__(cls) # 错误
        obj=super(People,cls).__new__(cls)  #重用父类__init__方法 造出个对象obj
        return obj

# 分析:调用Pepole的目的
#1、先造出一个People的空对象
#2、为该对空对象初始化独有的属性
# obj1=People('egon1',age=18)
# obj2=People('egon2',age=18)
# print(obj1)
# print(obj2)

obj=People('egon',age=18)
print(obj.__dict__)
print(obj.name)
obj.eat()</strong>

 

转载于:https://www.cnblogs.com/Marcki/p/10111939.html

rule-engine:一种轻量级,可选类型的表达语言,具有用于匹配任意Python对象的自定义语法 规则引擎 一种轻量级(可选)的表达语言,具有用于匹配任意Python对象的自定义语法。 可从获得文档。 规则引擎表达式以其自己的语言编写,在Python中定义为字符串。 语法与Python最相似,其灵感来自Ruby。 该语言的一些功能包括: 可选的类型提示 用正则表达式匹配字符串 日期时间数据类型 复合数据类型(等同于Python dict,列表和集合类型) 资料属性 线程安全 用法示例 以下示例演示了定义规则对象并将其应用于两个字典的基本用法,显示了一个匹配而另一个不匹配。 有关更多信息,请参见。 import rule_engine # match a literal first name and applying a regex to the email rule = rule_engine . Rule ( 'first_name == "Luke" and e 立即下载

相关推荐

【华为Hilink SDK Linux系统开发】目录 开源一小步

目录 【华为Hilink开发】第一章:华为hilink平台简介及开发流程 【华为Hilink开发】第二章:华为hilink SDK网络适配、网关添加删除 【华为Hilink开发】第三章:华为hilink SDK子设备添加、删除 【华为Hilink开发】第四章:华为hilink SDK子设备控制及同步 【华为Hilink开发】第五章:华为hilink SDK适配遇到的问题 ...

开源一小步 3620

【Python养成】:案例(设计三维向量类、实现向量的加法、减法以及向量与标量的乘法和除法运算、编写自定义类,模拟内置集、编写自定义类,模拟双端队列。)

【Python养成】:案例(设计三维向量类、实现向量的加法、减法以及向量与标量的乘法和除法运算、编写自定义类,模拟内置集、编写自定义类,模拟双端队列等等)

嵌入式up 4786

EndNote全文检索实战:如何快速配置学校图书馆资源并精准查找文献

本文详细介绍了EndNote全文检索功能的实战配置方法,核心在于通过正确设置OpenURL链接解析器,无缝对接学校图书馆资源,实现一键精准获取文献全文。文章提供了从理解机制、四步配置法到进阶技巧的完整指南,帮助科研人员高效管理海量PDF,构建个人知识体系,大幅提升文献调研与写作效率。

weixin_29228781的博客 280

python集合类型内置方法

python集合类型内置方法 文章目录python集合类型内置方法一.用途1.关系运算2.去重二.定义方式三.类型转换四.常用操作关系运算1.交集 : `&`, `.intersection()`2.并集 : `|`, `.union()`3.差集 : `-`, `.difference()`4.对称差集 : `^`, `.symmetric_difference()`5.父集 :`>=`, `.issuperset()`6.子集 : `<=`, `.issubset()`去重1.简单去

淘小欣的博客 1954

Cursor Cloud Agent:云原生编程工作流的底层重构

编程工作流正从本地计算范式转向云原生执行范式。Cloud Agent 本质是将代码理解、生成、执行与调试等核心能力下沉至隔离、可控、按需分配的云端虚拟机,通过 Firecracker 微虚拟机实现亚秒级启动,并依托上下文快照、环境镜像化和内核级沙箱保障一致性、算力弹性与数据安全。这一范式突破了传统本地 AI 编程助手在环境依赖、调试能力与企业合规上的根本局限,使 IDE 从编辑工具升维为分布式开发指挥中心。本文深入解析其运行机制与工程落地实践。

weixin_34354173的博客 337

【笔记6】SP3485自动收发电路设计分析

则TXD路为1,MOS管导通,2/3引脚为0,芯片实际上事与愿违的进入了接收模式。但是,由于我们采用单根双绞线与上位机通信,在数据发出去前数据线上没有任何信号传输,所以AB处于高阻态,进而受到R1下拉与R2上拉的影响,差分信号为1,所以输出1;此外,RXD内路也被上拉,485总线B端上拉,A端下拉。此时TXD由于没有数据传输,所以一直处于1的状态,因而MOS管导通,2/3引脚为0,芯片处于正常接收状态。总而言之就是,RE#与 DE只能有一个是1,1代表微控制器向外发送,0代表微控制器接收。

Haytham233的博客 3146

python常见数据结构的自定义

案例一: 自定义数组类,重写了一部分特殊方法以支持数组之间、数组与整数之间的四则运算以及内积、大小比较、成员测试和元素访问等运算符。 案例二: 自定义实现集合, 模拟Python内置集合类型(set),实现元素添加、删除以及并集、交集、对称差集等基本运算 无序,不可重复 2. 可集合运算 3. 元素是可哈希 案例三: 自定义栈,实现基本的入栈、出栈操作 后进先出 push() pop() 案例四: 自定义队列结构,实现入队、出队操作,提供超时功能。 案例五: 创建树,存数据,遍历( 前序,中序,后序) 案例

weixin_43761767的博客 2074

【2025最新版】间接平差——以水准网平差为例 (python详细过程版)

水准网间接平差的python代码实现。博客长期更新,本文最新更新时间为:2025年5月20日。

点云侠的博客 1702

python中定义一个类方法、完成功能自定义_python之面向对象编程-自定义内置方法定制类的功能,元类...

1.内置方法:__str__ 打印自动触发__del__ 删除对象之前自动触发2.用于实例化产生类的类称之为元类__call__ 调用对象时自动触发__new__ 新建一个空对象__init__ 调用类自动触发,初始化独有属性1.__str__方法在对象被打印时,自动触发,应该在该方法内采集与对象slef有关的信息,然后拼...

weixin_39984098的博客 209

yolov26改进 | 检测头篇 | 利用渐近特征金字塔网络AFPN改进yolov26检测头融合P2网络结构(让小目标无所遁形,全网独家首发)

本文介绍一种基于AFPN渐近特征金字塔网络改进的YOLOv26四检测头Detect_FPN。AFPN通过逐级融合底层细节、中层结构与高层语义特征,缩小不同尺度特征之间的语义差距,减少直接融合带来的信息冲突,使检测头获得更稳定、更充分的多尺度表达。本文进一步增加高分辨率小目标检测分支,强化对微小目标、密集目标和复杂背景目标的感知能力,适合工业缺陷、遥感及无人机等场景。文中将展示基础模型与改进模型的训练对比结果,并提供完整代码、配置文件、模块注册方法及Codex修改思路,方便直接复现和二次创新。

Snu77的博客 372

Linux内核驱动模型--PCIe(PCI Express)驱动​​

本文系统介绍了Linux内核中PCIe驱动的设计与实现。首先从架构定位入手,指出PCIe驱动基于PCI子系统扩展支持高速、低功耗特性。核心数据结构struct pci_driver包含设备匹配表id_table、生命周期函数probe/remove等关键组件。文章详细解析了驱动与设备的绑定流程、资源管理机制,并重点阐述了MSI-X中断、电源管理、热插拔和多队列等高级特性实现方案。最后提供了lspci、dmesg等调试工具的使用方法,总结了PCIe驱动在支持高性能设备中的关键作用。全文通过架构设计、核心结构、

amy_mhd的博客 428

python高级(元类、自定义元类)

什么是元类(metaclass)? 元类是类的类,是类的模板 元类的实例为类,正如类的实例为对象 class Foo: pass t1=Foo() #t1是通过Foo类实例化的对象 print(type(f1)) print(type(Foo)) 所有的对象都是实例化或者说调用类而得到的(调用类的过程称为类的实例化),比如对象t1是调用FOO类得到的一个实例。 如果一切皆为...

jamfiy的博客 5227

Open Dynamics Engine(ODE)物理引擎教程(1)--下载与安装准备

引言 ODE是一个免费的工业级库,用于模拟关节式刚体动力学,例如地面车辆、腿部生物和虚拟现实环境中的移动对象。它具有快速、灵活、健壮和独立于平台的特点,具有先进的关节、摩擦接触和内置的碰撞检测功能。 项目主页:http://www.ode.org/ 线上手册:http://ode.org/wiki/index.php?title=Manual 本教程为博主亲自亲测过程的总结,转载请注明出处! ...

腿足机器人领域 2216

Python元类详解

文章目录Python元类详解Python谜团元类的本质调用一个类时发生了什么再探元类自定义元类彩蛋:跳过python解释器 Python元类详解 元类比99%的用户所担心的魔法要更深,如果你在犹豫是否需要它们,那你就还不需要它们(真正需要元类的人,能够确定的知道需要它们,并且不必做任何解释)。——Tim Peters Python谜团 相信你一定听说过“Python中一切皆是对象”这句话,只要是一个对象,那么它就有自己的类型(type)。可以使用type查看一个对象的类型: $ python3 >

Kimii2的博客 3663

STM32F407中文手册

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

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Python中的元类

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

weixin_43790276的博客 3915

OV9734 DATASHEET,完整规格书

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

Python进阶丨如何创建你的第一个Python元类?

摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类。 Python元类设置类的行为和规则。元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一。通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类。本文介绍以下概念: 什么是Python元类? Python中的类和对象 Python中的动态类 Python元类如何工作? 类型类 Python中的自定义元类 装饰器vs元类 什么是P

华为云官方博客 2615

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

[Python学习日记-70] 元类

在上一篇章当中我们已经了解了面向对象的各种内置函数了,本篇我们将讲述“元类”,它是 Python 面向对象编程的深层次知识,学会了元类可以做到很多神奇的姿势,这次就带大家一起来探讨一下什么是元类,我们应该如何定制自己的元类,我们应该怎么调用我们自己的元类。

JovaZou的成长之路 1210

Python知识——元类、自定义元类

Python知识元类class机制分析自定义元类 元类 Python中有这么一句话,一切皆为对象,那么看下面的代码: class People: def __init__(self, name, age): self.name = name self.age = age def say(self): print('<%s:%s>' % (self.name, self.age)) obj = People('egon', 18

xiaotangyu7dong的博客 568

Python中的元类:掌握类的创建与定制

定义元类最简单的方式是继承type类,并重写其中的方法。__new__: 在类被创建之前被调用,可以用来修改类的定义。__init__: 类创建之后被调用,可以用来初始化类。__call__: 当类被实例化时被调用,可以用来修改实例化过程。")pass在这个例子中,我们定义了一个名为Meta的元类,并重写了__new__方法。每当使用Meta作为元类来定义一个新类时,就会输出一条信息。元类是Python中一个强大且灵活的特性,它允许开发者在类层面进行定制。

Envyᥫᩣ的博客 791

python面向对象之元类

python面向对象之元类 什么是元类(metaclass)? type是内置的元类 用class关键字定义的所有的类都是由内置的元类type实现的 所有内置的类也都是由内置的元类type实现的 #!/usr/bin/env python3 # -*- coding:utf-8 -*- class Person: def __init__(self, name: str, pid: int): self.name = name self.id = pid def info(self):

chaney的博客 2万+

内置函数isinstance,issubclass ,反射,自定义内置方法来定制类的功能,元类

一:内置函数      1,isinstance 判断某个对象是不是属于某一类型?        class Foo:            pass        obj=Foo()        print(isinstance(obj,Foo))# 在python3中统一类与类型的概念返回True 或者False      2,issubclass 判断一个类是不是另一个类的子类      ...

boteman123的博客 295

Python 元类

元类是“类的类”,它用于定义类的行为。换句话说,元类是创建类的模板。在 Python 中,类本身也是对象。元类用于控制类的创建过程,比如类的属性、方法、继承关系等。

weixin_67459449的博客 1473

Python 中的元类是什么

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

liluo0815481的博客 992

python全栈学习记录(二十三)反射、内置方法、类相关的函数、元类

元类中的__new__方法负责完成类产生的整个过程(拿到类名、确定基类(父类)、产生名称空间、用type产生类),并且这个过程是在类的定义阶段完成的,话句话说就是元类是在类的定义阶段被调用的。python的类内置了许多以__开头,以__结尾的方法,这些方法是在满足特定条件时自动触发的,如__init__的作用是初始化类的实例,会在类的实例创建完成以后自动触发。在python中一切皆对象,那么我们用class关键字定义的类本身也是一个对象,而负责产生该对象的类称之为元类,即元类可以简称为类的类。

m0_45491627的博客 913

深入Python元编程:了解声明与初始化定制元类

在Python中,元编程是指在运行时创建或定制类的编程。元类是Python中最强大的元编程工具之一,允许您控制类的创建过程。元类是类的类,它控制类的实例化,允许您自定义类的行为。当介绍元类时,可以深入解释元类的概念和其在Python中的作用。通过示例展示如何创建自定义元类,并控制类的行为。在这个示例中,可以展示一个简单的自定义元类示例。# 自定义元类行为pass在这个例子中,CustomMeta是一个自定义元类,它继承自type类。在创建类时,CustomMeta的__new__

涛哥聊Python 1192
上一篇: python之面向对象高级进阶-反射与内置模块
下一篇: python之元类高级应用,自定义元类隐藏属性,三种单例模式
bangwu8607
博客等级 码龄11年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值