在元类中设置隐藏属性

在元类中对创建的类进行属性隐藏 通过控制对象的__dict__属性格式从而对属性进行隐藏。在外面访问属性需要访问隐藏属性格式。

 

class Mymeta(type):
    def __init__(self,class_name,class_bases,class_dic):
        #控制类Foo的创建
        super(Mymeta,self).__init__(class_name,class_bases,class_dic)

    def __call__(self, *args, **kwargs):
        #控制Foo的调用过程,即Foo对象的产生过程
        obj = self.__new__(self)
        print(obj) # <__main__.Foo object at 0x0000019E54269518>
        self.__init__(obj, *args, **kwargs)
        print(self)  # Foo
        obj.__dict__={'_%s__%s' %(self.__name__,k):v for k,v in obj.__dict__.items()}
        print(obj)  # <__main__.Foo object at 0x0000019E54269518>
        return obj

class Foo(object,metaclass=Mymeta):  # Foo=Mymeta(...)
    def __init__(self, name, age,sex):
        print(self)  # <__main__.Foo object at 0x0000019E54269518>
        self.name=name
        self.age=age
        self.sex=sex


obj=Foo('egon',18,'male')
print(obj)  # <__main__.Foo object at 0x0000019E54269518>
print(obj.__dict__)

  

posted @ 2018-07-02 16:22  Roc_Atlantis  阅读(187)  评论(0编辑  收藏  举报