博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解python的元类
阅读量:7269 次
发布时间:2019-06-29

本文共 1537 字,大约阅读时间需要 5 分钟。

看了一篇文档,借鉴一下!写下自己对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方法是用来创建类的?# 道生一:传入typeclass 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/

 

转载于:https://www.cnblogs.com/chilo/p/8654602.html

你可能感兴趣的文章
Attach Volume 操作(Part II) - 每天5分钟玩转 OpenStack(54)
查看>>
Windows Phone 7 软件体系结构
查看>>
SLC教程
查看>>
卡巴司机如此重大bug为何视而不改?
查看>>
关于AIX上裸设备表空间管理
查看>>
JavaScript -- 类型转换
查看>>
化零为整WCF(4) - 异常处理(Exception、FaultException、FaultException、IErrorHandler)
查看>>
我来做百科(第四天)
查看>>
高德地图联合合作伙伴,为用户十一送大礼
查看>>
黑客演示用笔记本电脑入侵汽车控制系统
查看>>
《数字视频和高清:算法和接口》一1.1幅型比概念
查看>>
《分布式系统:概念与设计》一1.2 分布式系统的例子
查看>>
《面向对象分析与设计》一1.3面向对象的基本原则
查看>>
夏普CEO戴正吴将在公司盈利、股票回归主板后离职
查看>>
怀柔2500亩板栗园物联网管理
查看>>
传感器搭上基于云的连续监控方案解决传统资产监控的混乱局面
查看>>
《C语言程序设计》一 3.2 二分支选择结构
查看>>
G20报告更新,提出央行区块链联盟假设
查看>>
Skype新增“愤怒的小鸟”emoji表情
查看>>
《51单片机应用开发从入门到精通》——第 1 章 单片机开发预备知识 1.1 单片机开发流程...
查看>>