使用metaclass验证子类
来源:互联网 发布:110公安网络报警平台 编辑:程序博客网 时间:2024/06/05 14:08
实验代码
# coding: utf-8# Python2中定义Metaclass, 该Metaclass要继承自type, 实现__new__方法class MetaCls(type): def __new__(meta, name, bases, class_dict): print (meta, name, bases, class_dict) if class_dict['val'] < 0: raise ValueError('ERROR: val[%s] < 0!!!' % class_dict['val']) return type.__new__(meta, name, bases, class_dict)# 使用者要通过__metaclass__变量指定要使用的Metaclass# Metaclass中所编写的验证逻辑, 针对的是该基类的子类, 而非基类本身class BaseCls(object): __metaclass__ = MetaCls val = None# 验证成功class Derived1Cls(BaseCls): val = 1# 验证失败class Derived2Cls(BaseCls): val = -2
执行
python main.py
运行结果
# (<class '__main__.MetaCls'>, 'BaseCls', (<type 'object'>,), {'__module__': '__main__', '__metaclass__': <class '__main__.MetaCls'>, 'val': None})# Traceback (most recent call last):# File "main.py", line 11, in <module># class BaseCls(object):# File "main.py", line 7, in __new__# raise ValueError('ERROR: val[%s] < 0!!!' % class_dict['val'])# ValueError: ERROR: val[None] < 0!!!
参考
《Effective Python》第33条, 用元类来验证子类
阅读全文
0 0
- 使用metaclass验证子类
- metaclass
- metaclass 在 ORM中的使用
- 12.2Groovy使用MetaClass拦截方法
- Python2和Python3的metaclass使用
- Python基础-使用type()和元类metaclass
- Mysql的子类,专门验证登录 PassSql
- python metaclass
- Python Metaclass
- python metaclass
- 简明MetaClass
- python metaclass
- Python metaclass
- 使用VB进行子类化
- SubClassDialog使用(子类化)
- 使用UITableViewCell的自定义子类
- 使用抽象类派生子类
- UIControl 子类的简单使用
- android app broadcast组件-02-基础例子
- cocos2d-js总结
- (转)投资失败、女友离开、身无分文,私募大佬的牛逼都是熬出来的
- Ubuntu16.04下使用python3,pycharm 安装django
- Android dex分包方案
- 使用metaclass验证子类
- 48. Rotate Image
- RSA加解密工具
- Redis入门到精通-持久化机制
- MyBatis之整合Spring(Dao和Mapper两种方式)
- JS添加按钮交互
- TCP/IP四层模型详细讲解
- 51nod 1073 约瑟夫环 (数学递推)
- 函数实参和形参之间的传递