面向对象-元类

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)

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

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

时间: 2024-08-04 04:13:43

面向对象-元类的相关文章

面向对象——元类

1.exec 1 exec(source, globals=None, locals=None, /) 2 Execute the given source in the context of globals and locals. 3 4 The source may be a string representing one or more Python statements 5 or a code object as returned by compile(). 6 The globals

python面向对象--元类

一个类没有声明自己的元类,默认他的元类就是type,除了使用内置元类type,我们也可以通过继承type来自定义元类,然后使用metaclass关键字参数为一个类指定元类 class Foo: def __init__(self): pass f1=Foo()#f1是通过Foo实例化的对象 #print(type(f1)) print(type(Foo)) print(Foo.__dict__) def __init__(self,name,age): self.name=name self.a

Python全栈开发之9、面向对象、元类以及单例

前面一系列博文讲解的都是面向过程的编程,如今是时候来一波面向对象的讲解了 一.简介 面向对象编程是一种编程方式,使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用.类就是一个模板,模板里可以包含多个方法(函数),方法里实现各种各样的功能,,对象则是根据模板创建的实例,通过实例,对象可以执行类中的方法,每个对象都拥有相同的方法,但各自的数据可能不同. 二.类.对象和方法 在Python中,定义类是通过class关键字,class后面紧接着是类名,类名通常

Python高级编程 面向对象、元类、多线程、异步IO、asyncio

—— 面向对象 —— 鸭子类型抽象基类类变量.对象变量的查找顺序静态方法.类方法.实例方法数据封装和私有属性对象的自省机制上下文管理器contextlib实现上下文管理器super函数的查找顺序mixin继承模式的应用 —— asyncio并发编程 —— 事件循环协程嵌套call_soon.call_later.call_atcall_soon_threadsafeThreadPoolExecutor+asyncioasyncio 模拟 http 请求future 和 taskasyncio 同

面向对象之 元类 , 反射 , 双下方法

1.元类 type type元类,又称为构建类,python中一切皆对象,类也可以理解为对象,python中自己定义的类,以及大部分内置类,都是由type元类实例化得来的 元类type class A: pass obj = A() print(type('abc')) #<class 'str'> print(type([1,2,3])) #<class 'list'> print(type((22,33))) #<class 'tuple'> print(type(

Python 面向对象高级编程——使用枚举和元类

1.1   使用枚举 基于Enum类实现的枚举 >>> fromenum import Enum >>> Month = Enum('Month', ('Jan','Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) >>> for name, member inMonth.__members__.items(): ...    print(name,

Python学习笔记八 面向对象高级编程(二)元类

参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 在廖老师的学习网站里"使用元类"这部分还是把我给看晕了...网上搜到一篇感觉讲的相对易懂一些,贴出链接:两句话掌握 Python 最难知识点--元类--以此文作为这篇笔记的源本. "道生一,一生二,二生三,三生万物" 1.在Python世界中,"type"即为道

面向对象进阶6:元类

六 练习题 练习一:在元类中控制把自定义类的数据属性都变成大写 class Mymetaclass(type): def __new__(cls,name,bases,attrs): update_attrs={} for k,v in attrs.items(): if not callable(v) and not k.startswith('__'): update_attrs[k.upper()]=v else: update_attrs[k]=v return type.__new__

python面向对象高级:反射、魔法方法、元类

自省/反射什么是反射?自省也称作反射,这个性质展示了某对象是如何在运行期取得自身信息的.并且在python里,反射可以使得程序运行时对象拥有增删改查它本身属性或行为的一种能力如果Python不支持某种形式的自省功能,dir和type内建函数,将很难正常工作.还有那些特殊属性,像__dict__,__name__及__doc__反射的使用场景? 即插即用,即可以事先定义好接口,接口只有在被完成后才会真正执行 比如:如果和别人共同合作开发项目,但是需要用到对方的类的方法,对方还没完成 f1=FtpC