首页 > 编程语言 >Pyhton - 类元编程

Pyhton - 类元编程

时间:2024-04-23 22:13:29浏览次数:19  
标签:__ 类元 子类 编程 Pyhton Meta MyClass type

目录

类元编程是指在运行时创建或定制类的技艺。在Python 中,类是一等对象,因此任何时候都可以使用函数新建类,无须使用class关键字。类装饰器也是函数,不过能够审查、修改,甚至把被装饰的类替换成另一个类。最后元类是类元编程最高级的工具:使用元类可以创建具有某种特质的全新类,例如前面讲过的抽象类。

身为对象的类

与Python 中的很多程序实体一样,类也是对象。Python数据模型为每个类定义了很多属性,除了__class__、namemro。还有以下标准属性。

cls.bases: 由类的基类构成的元组。

cls.qualname: 类或函数的限定名称,即从模块的全局作用域到类的点分路径。在一个类中定义另一个类是会用到这个属性。例如,Django模型类Ox 内部有一个名为Meta的类。Meta类的__qualname__是Ox.Meta,但是__name__只是Meta.

cls.subclasses:这个方法会返回包含类的直接子类的列表,其实现是使用弱引用、以防止在超类和子类之间出现循环引用(子类在__bases_属性中存储指向超类的强引用)。这个方法返回的列表中是内存里现存的子类,不含尚未导入的模块在中的子类。

type:内置的类工厂函数

以下面这个简单的类为例
class MyClass(MySuperClass,MyMixin):
  x = 42,
  def x2(self):
    return self.x * 2

使用type 构造函数,可以在运行时创建MyClass类,如下所示。
  MyClass  = type('MyClass', (MySuperClass,MyMixin),{'x':42,  'x2': lambda self: self.x * 2},)

标签:__,类元,子类,编程,Pyhton,Meta,MyClass,type
From: https://www.cnblogs.com/czzz/p/18153868

相关文章

  • 单向循环链表和双向链表程序编程
    链表学习记录设计单向循环链表的接口/***********************************************************************************************************设计单向循环链表的接口****Copyright(c)[email protected]*************......
  • Flink状态编程:为什么不建议在ValueState里面存Map?
    Flink状态编程:为什么不建议在ValueState里面存Map?文章目录先说结论性能:TTL:State需要存什么数据Heap模式ValueState和MapState如何存储StateBackend模式如何存储和读写State数据1.RocksDB模式ValueState和MapState如何存储1.1ValueState如何映射为RocksDB......
  • 前端编程另一种数据传输方法,window.postMessage 技术
    window.postMessage是一项非常实用的浏览器技术,它允许不同窗口或框架之间进行安全的消息传递。一、技术介绍window.postMessage可以在不同的源之间传递消息,包括跨域的情况。这为跨文档通信提供了一种强大而灵活的方式。二、使用方法举例假设有两个页面,一个是发送方页面send......
  • 实验3 C语言函数应用编程
    task1.c1#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#include<windows.h>5#defineN8067voidprint_text(intline,intcol,chartext[]);//函数声明8voidprint_spaces(intn);//函数声明9voidpri......
  • C#异步编程
    既然有了多线程为什么还需要异步   异步并不意味者多线程,单线程同样可以异步异步默认借助线程池   多线程经常阻塞,二异步要求不阻塞多线程与异步的使用场景不同  多线程:       适合CPU密集型操作 适合长期运行任务线程的创建与开销较大......
  • 并发编程(ReentrantReadWriteLock)
    ReentrantReadWriteLock是一个可重入读写锁,内部提供了读锁和写锁的单独实现。其中读锁用于只读操作,可被多个线程共享;写锁用于写操作,只能互斥访问ReentrantReadWriteLock尤其适合读多写少的应用场景读多写少:在一些业务场景中,大部分只是读数据,写数据很少,如果这种场景下依然使用......
  • 并发编程(ReentrantLock)
    ReentrantLock是独占锁,每次只能有一个线程能获取到锁(支持重入)。其他未获取锁的线程会放入的CLH队列中,等待当前线程唤醒;主要分为公平锁和非公平锁,由内部类FairSync和NoFairSync来实现。主要的区别在于非公平锁每次都会尝试竞争,竞争不到锁才会放入到CLH队列中NonfairSync类......
  • 软件开发与创新实践——结对编程
    实验目的本次学习的任务是通过两人结对编程(一个人Coding,一个人审核)的方式,来体会团队合作的过程。本次实验由我和2230232共同完成。编程题目小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/......
  • 软件开发与创新——结对编程
    本次结对编程作业由我和学号2252406的同学一起编写一、题目:小学老师要求出300道四则运算练习题要求:两个运算符,都是100以内的数字,答案在0-1000之间。拓展功能:有除法时计算的结果保留两位小数,避免除0错误,回答错误的题目存到“错题本.txt”文件中,方便后续查看及改正。300道题全部......
  • day20-并发编程(下)
    1.多进程开发进程是计算机中资源分配的最小单元;一个进程中可以有多个线程,同一个进程中的线程共享资源;进程与进程之间则是相互隔离。Python中通过多进程可以利用CPU的多核优势,计算密集型操作适用于多进程。1.1进程介绍importmultiprocessingdeftask(): passif__name......