metaclass简单使用
metaclass : 元类, 就是创建python类对象的类
# 便用type动态创建类 # 1. 使用type创建一个User类对象 无基类,无属性 . () : 表示基类, {}:属性
User = type('User', (), {})
user = User()
print(user) # <class '__main__.User'> # 2. 创建一个user对象,且带有一个name属性 User = type('User', (), {'name': '小强'})
user = User()
print(user.name) # 小强 # 3. 创建一个user对象,且带有一个name属性 和一个say方法 def say(self): # 这里一定要加个self, 否则报错
return 'i am say' User = type('User', (), {'name': '小强', 'say': say})
user = User()
print(user.say()) # i am say # 4. 创建一个User类,且还有个基类 class BaseUser:
def kk(self):
return 'i am base class' User = type('User', (BaseUser,), {'name': '小强'})
user = User()
print(user.kk()) # i am base class # 5. 元类,创建类的类
# 自定义一个元类,. 继承type即可
class MetaClass(type):
def __new__(cls, *args, **kwargs):
print('invoke MetaClass __new__')
return super().__new__(cls,*args, **kwargs) # 这样子会通过MetaClass创建User类对象, 如果找不到metaclass ,就是调用内置的type创建User类对象
class User(metaclass=MetaClass):
"""
User类继承了metaclass,那么就相当于将__new__这个方法委托给了metaclass
""" def __init__(self,name):
self.name = name
def __str__(self):
return self.name # 实例化一个user对象时,会先调用MetaClass的__new__方法,再调用User类的__init__
user = User(name="小马")
metaclass简单使用的更多相关文章
- Python 多重继承时metaclass conflict问题解决与原理探究
背景 最近有一个需求需要自定义一个多继承abc.ABC与django.contrib.admin.ModelAdmin两个父类的抽象子类,方便不同模块复用大部分代码,同时强制必须实现所有抽象方法,没想 ...
- Python中元类
元类(metaclass) 简单地说,元类就是一个能创建类的类,而类class 是由type创建的,class可以创建对象 type与object的关系详见:python中type和object 1. ...
- python 类和元类(metaclass)的理解和简单运用
(一) python中的类 首先这里讨论的python类,都基于继承于object的新式类进行讨论. 首先在python中,所有东西都是对象.这句话非常重要要理解元类我要重新来理解一下python中的 ...
- 深刻理解Python中的元类metaclass(转)
本文由 伯乐在线 - bigship 翻译 英文出处:stackoverflow 译文:http://blog.jobbole.com/21351/ 译注:这是一篇在Stack overflow上很热 ...
- Python之美[从菜鸟到高手]--深刻理解原类(metaclass)
本来想自己写这篇文章的,可当我读了这篇文章http://blog.jobbole.com/21351/,我打消了这个念头,因为肯定写的没有人家的好,说的通俗易懂,面面俱到.就厚着面皮修改下格式,测试下 ...
- 详解Objective-C的meta-class
比较简单的一篇英文,重点是讲解meta-class.翻译下,加深理解. 原文标题:What is a meta-class in Objective-C? 原文地址:http://www.cocoaw ...
- 深刻理解Python中的元类(metaclass)
译注:这是一篇在Stack overflow上很热的帖子.提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自省有关,但仍然觉得 ...
- 简述一个javascript简单继承工具的实现原理
背景 由于本人非常希望能够开发自己的游戏,所以业余时间一直在想着能不能自己一些好玩又有趣的东西出来,最近随着steam上众多独立游戏的爆发,感觉自己又燃烧了起来,所以又拾起了很久以前的一个2d引擎,决 ...
- Python中metaclass解释
Classes as objects 首先,在认识metaclass之前,你需要认识下python中的class.python中class的奇怪特性借鉴了smalltalk语言.大多数语言中,clas ...
随机推荐
- idea 使用过程中的一些设置记录
1.XML sql底色 在mapper文件中,SQL出现黄色的底色. ** settings ** > ** inspections ** 去掉 ** SQL ** 中的 ** No data ...
- .net core 学习小结之 自定义JWT授权
自定义token的验证类 using System; using System.Collections.Generic; using System.IO; using System.Linq; usi ...
- linux 进程2
一. exec族函数 1.1. 为什么需要exec函数 a. fork子进程是为了执行新程序(fork创建了子进程后,子进程和父进程同时被OS调度执行,因此子进程可以单独的执行一个程序,这个程序宏观上 ...
- oracle管理基础知识
1.oracle的安装 win下 linux下 2.内存和后台进程=实例 为何将oracle做的如此复杂呢 1.内存: --提高查询速度 --提升处理数据的速度 2.后台进程 --为了完成特定的服务, ...
- PyCharm控制台python shell 和 IPython shell的切换
1. IPython介绍 IPython 是一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许 ...
- CVE-2016-8655,af_packet Linux 內核通殺提權漏洞淺析
簡單寫一下思路 這個東西需要namespace方面的支援, 首先open socket , 一連串路徑(packet_set_ring()->init_prb_bdqc()->prb_se ...
- NoSQL特点
- 1. Docker快速入门(仓库,镜像,容器)
参考阿里云文档:https://help.aliyun.com/document_detail/51853.html?spm=a2c4g.11186623.6.820.RaToNY 参考菜鸟教程文档: ...
- 剑指offer-对称二叉树-树-python
题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. # -*- coding:utf-8 -*- # class TreeNo ...
- 原生ajax与伪ajax
原生ajax源码 function GetXHR(){ var xhr = null; if(XMLHttpRequest){ xhr = new XMLHttpRequest(); #如果没有XML ...