下载此文档

掌握Python最难知识点元类.doc


文档分类:IT计算机 | 页数:约30页 举报非法文档有奖
1/30
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/30 下载此文档
文档列表 文档介绍
掌握Python最难知识点:元类
道和一,是我们今天讨论的命题,而二、三、和万物,则是我们常常使用的
类、实例、属性和方法,用hello world来举例:
#创建一个Hello类,拥有属性say_hell。----二的起源
cla类的操作都在_new__中完成,它的第一个参数是将创建的类,之后的 参数即是三大永恒命题:我是谁,我从哪里来,我将到哪里去。它返回的 对象也是三大永恒命题,接下来,这三个参数将一直陪伴我们。
4.
在_new__中,我只进行了一个操作,就是
attrs['say_' + name] = lambda self, value,sayings name: print(saying + ','+value + '!')
它跟据类的名字,创建了一个类方法。比如我们由元类创建的类叫"Hell。”, 那创建时就自动有了一个叫"say_HelloH的类方法,然后又将类的名字 "Hell。”作为默认参数saying,传到了方法里面。然后把hello方法调用 时的传参作为value传进去,最终打印出来。
那么,一个元类是怎么从创建到调用的呢?
来! 一起根据道生一、一生二、二生三、三生万物的准则,走进元类的生命 周期吧!
#道生一:传入type
class SayMetaClass(type):
#传入三大永恒命题:类名称、父类、属性
def __new__(cls, name, bases, attrs):
#创造"天赋"
attrs['say_' + name] = lambda self,value,saying = na
me: print(saying + ','+value + '!')
#传承三大永恒命题:类名称、父类、属性
return (cls, name, bases, attrs)
# 一生二:创建类
class Hello(object, metaclass = SayMetaClass):
pass
#二生三:创建实列
hello = Hello()
#三生万物:调用实例方法
('world!')
输出为
Hello, world!
注意:通过元类创建的类,第一个参数是父类,第二个参数是metaclass
普通人出生都不会说话,但有的人出生就会打招呼说”Hell。",”你好”,
"sayolala”,这就是天赋的力量。它会给我们面向对象的编程省下无数的
麻烦。
现在,保持元类不变,我们还可以继续创建Sayolala , Nihao类,如下:
一生二:创建类
class Sayolala(object, metaclass = Say MetaClass):
pass
#二生三:创建实列
s = Sayolala()
#三生万物:调用实例方法
('japan!')
输出
Sayolala, japan!
也可以说中文
一生二:创建类
class Nihao(object, metaclass = Say MetaClass):
pass
#二生三:创建实列
n = NihaoQ
#三生万物:调用实例方法
('中华厂)
输出
Nihao,中华!
再来一个小例子:
#道生一
class ListMetaclass(type):
def __new__(cls, name, bases, attrs):
#天赋:通过add方法将值绑定
attrs['add'] = lambda self, value: (value
)
return (cls, name, bases, attrs)
# —生二 class MyList(list, metaclass = List Metaclass):
pass
#二生三
L = MyListO
#三生万物

现在我们打印一下L
print(L)
>>> [1]
而普通的list没有add()方法
L2 = list()
(l)
> > >AttributeError: 'list' object has no attribute 'add'
太棒了 !学到这里,你是不是已经体验到了造物主的乐趣?
python世界的一切,尽在掌握。
年轻的造物主,请随我一起开创新世界。
我们选择两个领域,一个是Django的核心思想,"Object Relational Mapping",即对象-关系映射,简称ORM。
这是Django的一大难

掌握Python最难知识点元类 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数30
  • 收藏数0 收藏
  • 顶次数0
  • 上传人蓝天
  • 文件大小93 KB
  • 时间2022-07-01