python元类:type和metaclass
python元类:type和metaclass
- python中一切皆对象,所以类本身也是对象。类有创建对象的能力,那谁来创建类的呢?答案是type。
1.用tpye函数创建一个类
class A(object):
pass
# 类名 = tpye(类名-str,父类-tuple,属性-dict)
#此条命令创建类相当于上个class创建类,效果是一样的。
B = type('B', (object,), {})
print(A)
print(B)
输出结果:
<class '__main__.A'>
<class '__main__.B'>
- 有没有发现输出的结果是一样的。type创建出来的和class定义的都是类。
2.定义带有属性的类:
>>> class Foo(object):
… bar = True
#相当于:
>>> Foo = type("Foo", (object), {'bar':True})
3.定义带有方法的类:
class Dog(object):
def bark(self):
print('wang wang ..')
@classmethod
def eat(self):
print('i am eating...')
# ----------------------------
# 上面创建的类可以用type实现,就相当于:
def bark(self):
print('wang wang ..')
# @staticmethod也是这样用
@classmethod
def eat(self):
print('i am eating...')
Dog = type('Dog', (object,), {'bark': bark, 'eat': eat})
# -----------------------------
# 来试验一下:
dog = Dog()
dog.eat()
dog.bark()
输出结果:
i am eating...
wang wang ..
4.__metaclass__自定义元类:
- python3中:
def say_hello(self):
print('hello, I am ' + str(self))
def my_type(class_name, class_fathers, class_attr):
class_attr['say_hello'] = say_hello # 给属性列表中加入say_hello
return type(class_name, class_fathers, class_attr)
class Foo(object, metaclass=my_type): # 用指定的元类来创建类(python3中需要这样用metaclass)
pass
print(Foo)
a = Foo()
print(a)
a.say_hello() # Foo对象拥有了say_hello的方法
- python2中:
def say_hello(self):
print('hello, I am ' + str(self))
def my_type(class_name, class_fathers, class_attr):
class_attr['say_hello'] = say_hello # 给属性列表中加入say_hello
return type(class_name, class_fathers, class_attr)
class Foo(object): # 用指定的元类来创建类
__metaclass__ = my_type # (python2中需要这样用metaclass)
print(Foo)
a = Foo()
print(a)
a.say_hello() # Foo对象拥有了say_hello的方法
- metaclass可以用来给类做一些初始化(可以继承父类,没谁用这个)。其实metaclass一般情况下没什么用,但了解了总算是更加了解了python的底层。
python元类:type和metaclass的更多相关文章
- python 元类 type metaclass
python中一切皆对象,类对象创建实例对象,元类创建类对象,元类创建元类. 元类创建类对象有2中方式: 一.type方法 type(类名, 由父类名称组成的元组(针对继承的情况,可以为空),包含属性 ...
- python 元类metaclass
文章转自:http://www.cnblogs.com/linhaifeng/articles/8029564.html 一 知识储备 exec:三个参数 参数一:字符串形式的命令 参数二:全局作用域 ...
- Python进阶----类的结构(公有成员 , 私有成员(私有属性,私有方法),类方法,静态方法,属性) ,isinstance 和issubcalss ,元类(type())
Python进阶----类的结构(公有成员 , 私有成员(私有属性,私有方法),类方法,静态方法,属性) ,isinstance 和issubcalss ,元类(type()) 一丶类的结构细分 ...
- Python面向对象06 /元类type、反射、函数与类的区别、特殊的双下方法
Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3 ...
- python 面向对象专题(六):元类type、反射、函数与类的区别、特殊的双下方法
目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3. 函数与类的区别 4. 特殊的双下方法 1. 元类type type:获取对象 ...
- python 元类的简单解释
本文转自博客:http://www.cnblogs.com/piperck/p/5840443.html 作者:piperck python 类和元类(metaclass)的理解和简单运用 (一) p ...
- Python元类之由浅入深
前言 元类属于python面向对象编程的深层次的魔法,非常重要,它使我们可以更好的掌控类从创建到消亡的整个生命周期过程.很多框架的源码中都使用到了元类.例如 Django Framework 中的 ...
- Python 元类 - Metaclasses
Python 元类 - Metaclasses 默认情况下儿, classes 是有 type() 构造的. 类的结构体在一个新的 namespace 被执行, 类的名字 class name 绑定( ...
- Python进阶丨如何创建你的第一个Python元类?
摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类. Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一. ...
随机推荐
- mybatis基础犯错总结
1.关于mybatis的文件一般都是其mapper文件出错: 首先关于输入参数parameterType出错: (1)基本数据类型:如果输入参数只有一个,其数据类型可以是基本数据类型,也可以是自己定的 ...
- 000. 规范类的设计(ing)
1.变量命名规范 变量命名有许多约定俗成的规范,下面的这些规范能有效提高程序的可读性: 标识符要能体现实际含义(顾名思义). 变量名一般用小写字母,如index,不要使用Index或INDEX. 用户 ...
- re正则模块
1.正则表达式的常用符号 '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上 ...
- qq快速登陆
http://www.cnblogs.com/1996V/p/7481823.html qq快速登陆
- linux 时间设置
自动校准 ntpdate -u cn.pool.ntp.org 时区 rm -f /etc/localtimeln -s /usr/share/zoneinfo/Asia/Shanghai /etc/ ...
- pasty公式
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- 在服务器上运行Jar包
在服务器上运行Jar包 并且该Jar包依赖其他的Jar文件的时候,采用如下格式 java -Djava.ext.dirs=你依赖的Jar文件路径 -jar 你要运行的Jar文件 包名+类名 例如: j ...
- BZOJ2588:LCA+主席树来实现树上两点之间第K大点权查询
对于每个节点维护这个节点到根的权值线段树 对于每个询问(x,y),这条路径上的线段树 tree[x]+tree[y]-tree[lca(x,y)]-tree[fa[lca(x,y)]] #includ ...
- Elasticsearch技术解析与实战(七)Elasticsearch partial update
普通的partial update 1.插入测试数据 PUT /test_index/test_type/10 { "test_field1": "test1" ...
- iOS数据存取---iOS-Apple苹果官方文档翻译
CHENYILONG Blog iOS数据存取---iOS-Apple苹果官方文档翻译 数据存取/*技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http:// ...