• 通过元类控制类的调用过程


    __call__

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

    class Mymeta(type):
      def __call__(self,*args,**kwargs):
        #print('xxx')
        return 1
    class Person(object,metaclass=Mymeta):
      school = 'oldboy'
      def __init__(self,name):
        self.name =name
      def score(self):
        print('分数是100')
        
    p =Person('nick')
    print(p.name)
    
    class Person():
      school = 'oldboy'
      def __init__(self,name):
        self.name=name
      def score(self):
        print('分数是100')
      def __call__(self,*args,**kwargs):
        print('xxxxx')
        
    p = Person('nick')#自动触发init的执行
    #先触发元类的__call__
    p()
    
    #__new__
    object
    
    #给我把对象中的所有属性都设置成私有的
    
    class Mymeta(type):
      def __call__(self,*args,**kwargs):
         #self 是Person这个类
         #print(args)
         #print(kwargs)
         #return self(*args)#这里不行,会递归
         #self.__new__(self)
         #实例化产生一个Person类的对象,借助__new__来产生,需要吧类传过去,才能产生对象
         #obj 是Person类的对象,只不过是空的
          obj = object.__new__(self)
         #obj =self.__nwe__(self)
         #调用__init__方法完成初始化
         #类来调用__init__方法,就是个普通函数,有几个参数就传几个参数
         #self.__init__(obj,args,kwargs)
         #对象来调用__init__方法,对象的绑定方法,会把自身传过来
         obj.__init__(*args,**kwargs) 
          print(obj)
          reutnr obj
          
     class Person(object,metaclass=Mymeta):
      	school = 'oldboy'
        def __init__(self,name):
          	self.name = name
        def score(self):
          	print('分数是100')
            
    p = Person(name = 'nick')
    print(p)
    print(p.name)
    
    #把对象所有属性都变成私有
    class Mymeta(type):
      def __call__(self,*args,**kwargs):
        obj = object.__new__(self)
        obj.__init__(*args,**kwargs)
        #print(obj.__dict__)
        obj.__dict__={}
    
  • 相关阅读:
    制作企业IT解决方案的几项训练
    Community Server 1.0 Beta安装使用记录
    SharePoint Portal Server定制之区域模板定义
    从售前工作的角度了解SharePoint产品和技术
    活动目录的应用组策略
    企业客户组织结构在售前工作中的作用
    Community Server 1.0 Beta安装使用记录(二)
    2004年钢铁行业信息化现状
    IT解决方案编写小结
    关于软件系统架构设计的一些新思想
  • 原文地址:https://www.cnblogs.com/luodaoqi/p/11528871.html
Copyright © 2020-2023  润新知