博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十三章、元类之控制类的调用过程
阅读量:5292 次
发布时间:2019-06-14

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

目录

第十三章、元类之控制类的调用过程

一、__call__

作用:控制类的调用过程,实际上在控制:对象的产生

  • 控制名称空间

    class Mymeta(type):      def __call__(self,*args, **kwargs):          obj=self.__new__(self)#生成空对象          obj.__init__(*args, **kwargs)#调用obj的__init__()          obj.__dict__['attr']=kwargs          return obj  class Mydict(dict,metaclass=Mymeta):      def __getattr__(self, item):          return self.__dict__['attr'][item]      def __setattr__(self, key, value):          self[key]=value          self.__dict__['attr'][key] = value  ----------------------------------------------------  di=Mydict(name='nick',age=18)  print(di.__dict__)  print(di.name)  di.sex='male'  print(di)  print(di.__dict__)  -----------------------------------------------------  {'attr': {'name': 'nick', 'age': 18}}  nick  {'name': 'nick', 'age': 18, 'sex': 'male'}  {'attr': {'name': 'nick', 'age': 18, 'sex': 'male'}}
  • 例2练习:给我吧对象中的所有属性都设置成私有的

    class Mymeta(type):    def __call__(self, *args, **kwargs):        obj=object.__new__(self)        obj.__init__(*args, **kwargs)        # print(obj.__dict__)        obj.__dict__={ '_%s__%s'%(self.__name__,k):v for k,v in obj.__dict__.items()}        # print(obj.__dict__)        return objclass Person(object, metaclass=Mymeta):    school = 'oldboy'    def __init__(self, name):        self.name = name    def score(self):        print('分数是100')p = Person(name='nick')print(p.__dict__) #{'_Person__name': 'nick'}print(p.name)     #会报错

转载于:https://www.cnblogs.com/demiao/p/11456347.html

你可能感兴趣的文章
第一册:lesson seventy nine.
查看>>
GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
查看>>
团队作业
查看>>
数据持久化时的小bug
查看>>
mysql中key 、primary key 、unique key 与index区别
查看>>
bzoj2257
查看>>
Linux查看文件编码格式及文件编码转换<转>
查看>>
Leetcode: Find Leaves of Binary Tree
查看>>
Vue 模板解释
查看>>
http://www.bootcss.com/
查看>>
20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
查看>>
将多张图片和文字合成一张图片
查看>>
自己动手写ORM(01):解析表达式树生成Sql碎片
查看>>
如何使用USBWebserver在本机快速建立网站测试环境
查看>>
百度Ueditor编辑器的Html模式自动替换样式的解决方法
查看>>
变量提升
查看>>
线性表可用顺序表或链表存储的优缺点
查看>>
在现有的mysql主从基础上,搭建mycat实现数据的读写分离
查看>>
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>