码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象-元类

时间:2018-04-20 14:35:45      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:空间   分享   obj   .com   object   blank   pass   一个   style   

http://www.cnblogs.com/linhaifeng/articles/8029564.html

类的类就为元类

元类所需知识

#exec()
#参数1:字符串形式的命令
#参数2:全局作用域(字典形式),不指定默认使用全局globals()
#参数3:局部作用域(字典形式),不指定默认使用局部locals()
g={x:1,
   y:2}
l={}
#把exec中代码当一个函数来看待
exec("""
global x,m
x=10
m=100
z=3""",g,l)
print(g)
print(l)

技术分享图片技术分享图片

一切皆对象,对象可以怎么来用,共性?

  1. 都可以被应用,x=obj
  2. 都可以当函数的参数传入
  3. 都可以当函数的返回值
  4. 都可以当作容器类型的元素,如都可当列表的元素
#类也是一个对象
class Foo:
    pass
obj=Foo()
print(type(obj))
print(type(Foo))

技术分享图片

  • 产生类的类称之为元类,默认所有用class定义的类,他们的元类是type

定义类的方式

#方式一定义类:
class Chinese:
    country=China
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def talks(self):
        print("%s is talking" % self.name)

#方式二定义类:
#定义类的三要素
# 类名,类的基类,类的命名空间
class_name=Chinese
class_base=(object,)
class_body="""
country=‘China‘
def __init__(self,name,age):
    self.name=name
    self.age=age
def talks(self):
    print("%s is talking" % self.name)
"""
class_dic={}
exec(class_body,globals(),class_dic)
Chinese1=type(class_name,class_base,class_dic)
print(Chinese)
print(Chinese1)

技术分享图片

自定义元类来控制类的创建

 

面向对象-元类

标签:空间   分享   obj   .com   object   blank   pass   一个   style   

原文地址:https://www.cnblogs.com/yaya625202/p/8890507.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!