看了一篇文档,借鉴一下!写下自己对python元类的理解,欢迎各位大神给出意见。

我的理解就是

type用来创建元类,元类用来创建类,类用来创建实例

这样一想,是不是可以认为元类创建类的过程等同于类创建实例,类创建不同的实例,虽然每个实例都有类似的属性,方法,但具体都是不一样的!

class Fruits():
def __init__(self,name,color):
self.name=name
self.color=color def __new__(cls,name,color):
return object.__new__(cls) apple=Fruits('apple','red')
print(apple.name)
print(apple.color) banana=Fruits('banana','yellow')
print(banana.name)
print(banana.color)

类的两个实例apple,banana都有同样的属性name,age,但是各自的值确实不同的,都属于水果类,但却是不同的水果。。

再来看元类定制类的过程,直接引用大神的代码吧

元类创建类的过程中也可以认为是每个类都有相同的地方(比如都是一个元类创建,都有共同的Fu类),也有各自不同的地方(每个类的类名不同,实现的方法也不同)

# 猜想,类中的new方法是用来创建实例的
# 元类的new方法是用来创建类的? # 道生一:传入type
class SayMetaClass(type): # 传入三大永恒命题:类名称、父类、属性
def __new__(cls, name, bases, attrs):
print("test, new is running!")
# 创造“天赋”
attrs['say_' + name] = lambda self, value, saying=name: print(saying + ',' + value + '!')
# 传承三大永恒命题:类名称、父类、属性
return type.__new__(cls, name, bases, attrs) #########Hello类
# 一生二:创建类
class Hello(object, metaclass=SayMetaClass):
pass
# 二生三:创建实列
hello = Hello()
# 三生万物:调用实例方法
hello.say_Hello('world!') #########Nihao类
# 一生二:创建类
class Nihao(object, metaclass=SayMetaClass):
pass
# 二生三:创建实列
nihao = Nihao()
# 三生万物:调用实例方法
nihao.say_Nihao('world!')

这就是一个元类创建类的过程,通过class Hello(object, metaclass=SayMetaClass):  创建类,在创建的时候调用了元类的__new__方法(这里似乎发现一个通性:类的new方法用来创建实例,元类的new方法用来创建类)通过这个元类的new方法创建了类Hello跟Nihao,Hello拥有私人定制的say_**方法,是不是跟类的实例有点类似,这样理解起来感觉简单多了。。

文章链接:http://python.jobbole.com/88795/

理解python的元类的更多相关文章

  1. python 通过元类控制类的创建

    一.python中如何创建类? 1. 直接定义类 class A: a = 'a' 2. 通过type对象创建 在python中一切都是对象 在上面这张图中,A是我们平常在python中写的类,它可以 ...

  2. Python 的元类设计起源自哪里?

    一个元老级的 Python 核心开发者曾建议我们( 点击阅读),应该广泛学习其它编程语言的优秀特性,从而提升 Python 在相关领域的能力.在关于元编程方面,他的建议是学习 Hy 和 Ruby.但是 ...

  3. python中元类(metaclass)的理解

    原文地址:http://www.cnblogs.com/tkqasn/p/6524879.html 一:类也是对象 类就是一组用来描述如何生成一个对象的代码. 类也是一个对象,只要你使用关键字clas ...

  4. 对python中元类的理解

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

  5. Python的元类

    1.用元类验证子类 每当我们定义新类的时候,元类就会运行雅正代码,以确保这个新类符合规定的规范. Python系统把子类的class语句处理完毕,就会调用元类的 __new__ 方法.元类可以通过 _ ...

  6. 【转】Python 之 元类

    原文链接: https://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python      http://python.jo ...

  7. 转---一文读懂 python 的元类

    译注:这是一篇在Stack overflow上很热的帖子.提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自省有关,但仍然觉得 ...

  8. python使用元类

    原文:https://blog.csdn.net/youzhouliu/article/details/51906158 type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义 ...

  9. 谈谈Python中元类Metaclass(一):什么是元类

    简单的讲,元类创建了Python中所有的对象. 我们说Python是一种动态语言,而动态语言和静态语言最大的不同,就是函数和类不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个HelloW ...

随机推荐

  1. 5_Longest Palindromic Substring(Manacher) --LeetCode

    参考:https://www.felix021.com/blog/read.php?2040,https://segmentfault.com/a/1190000002991199 做了修改. 首先用 ...

  2. 【mysql】mysql基本操作

    mysql基本操作 1.mysql表复制 mysql 表结构的复制 create table t2 like t2 mysql 表数据的复制 insert into t2 select * from ...

  3. 【linux】 vsftpd自动

    开机默认VSFTP服务自动启动: 方法一-常用方便的方法 [root@localhost /]# chkconfig --list|grep vsftpd vsftpd          0:off ...

  4. hi3531 SDK 编译 kernel, 修改 参数

    开发环境用户指南上这么写的 3.1 内核源代码 成功安装Hi3531 SDK后,内核源代码已存放于SDK目录下的osdrv/目录中,用户可 直接进入目录进行相关操作. 3.2 配置内核 如果对内核和H ...

  5. RTSP协议分析

    RTSP 协议分析 1.概述:  RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetw ...

  6. HTML5可以省略全部标记的元素

    HTML5可以省略全部标记的元素 1.body 2.colgroup 3.html 4.head 5.tbody

  7. JNDI在本项目中的应用

    一,在tomcat的context文件中做如下配置 <?xml version="1.0" encoding="UTF-8"?> <Conte ...

  8. 促进客户转化,提高客单价!酷客多小程序发布版本V1.0.9!

    商户和企业主的又一次福音!酷客多小程序新零售o2o商城系统酷爱用户,为了追求极致的用户体验,没日没夜地沉浸于新功能的开发,经过一番努力,新功能终于上线啦! 此次版本迭代,在原有功能基础上做了大幅提升, ...

  9. android小程序之幸运菜谱

    android小程序之幸运菜谱 前言:刚刚结束短短5天的android公开课程,收获不少,写下来记录一下吧!(因为学校校企公开课的缘故才偶然接触的android,所以只学了这几天,不喜勿喷) 一开始得 ...

  10. [CF940F]Machine Learning

    codeforces 一句话题意 求区间数字出现次数的mex,带修改 sol 带修膜队不解释 带修膜队的排序! struct query{ int id,l,r,t; bool operator &l ...