python简单代码演示效果-演示python如何创建和使用一个简单的元类的代码
在做工程闲暇时间,将做工程过程比较重要的一些内容备份一下,如下内容段是关于演示python如何创建和使用一个简单的元类的内容,应该能对小伙伴们也有用途。
#!/usr/bin/env python
# [SNIPPET_NAME: Simple metaclass]
# [SNIPPET_CATEGORIES: Python Core]
# [SNIPPET_DESCRIPTION: Shows how to create a and use a simple metaclass]
# [SNIPPET_AUTHOR: Florian Diesch ]
# [SNIPPET_LICENSE: MIT]
# Copyright 2010 Florian Diesch
# All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
class PropertyMetaclass(type):
"""
This metaclass expects its instances to have a class attribute
__properties__ that is a dict mapping property names to their
default values. The metaclass creates the corresponding
properties
"""
def __init__(cls, name, bases, dict):
type.__init__(cls, name, bases, dict)
props = getattr(cls, '__properties__', {})
for name, default in props.iteritems():
type(cls).create_property(cls, name, default)
def attr_name(cls, prop):
""" returns the attribute name for property """
return '_%s'%prop
def create_property(cls, name, default):
""" creates a property named with default value """
getter=cls.create_getter(name)
setter=cls.create_setter(name)
prop=property(getter, setter, None, None)
# that's the attribute holding the actual value
setattr(cls, cls.attr_name(name), default)
# that's the property
setattr(cls, name, prop)
def create_getter(cls, prop):
""" creates a getter method for property """
attr=cls.attr_name(prop)
def getter(self):
print " class %s: get %s"%(cls.__name__, prop)
return getattr(self, attr)
return getter
def create_setter(cls, prop):
""" creates a setter method for property """
attr=cls.attr_name(prop)
def setter(self, value):
print " class %s: set %s to '%s'"%(cls.__name__, prop, value)
setattr(self, attr, value)
return setter
class Book(object):
__metaclass__= PropertyMetaclass # use the metaclass
__properties__ = { # some properties
'author': '[unknown title]',
'title': '[unknown author]'
}
if __name__ == '__main__':
book = Book()
print '%s by %s'%(book.title, book.author)
book.author = 'Euclid'
book.title = 'Elements'
print '%s by %s'%(book.title, book.author)
# prints:
#
# class Book: get title
# class Book: get author
# --unknown author-- by --unknown title--
# class Book: set author to 'Euclid'
# class Book: set title to 'Elements'
# class Book: get title
# class Book: get author
# Elements by Euclid
python简单代码演示效果-演示python如何创建和使用一个简单的元类的代码相关推荐
- Java Web创建并运行一个简单的网页
@创建并运行一个简单的网页TOC 在使用eclipse创建运行一个web项目前,需安装和配置好Tomcat和jre. 1.新建一个项目 2.选择过滤器文本Dynamic Web Project 3.输 ...
- 《Python Cookbook 3rd》笔记(2.19):实现一个简单的递归下降分析器
实现一个简单的递归下降分析器 问题 你想根据一组语法规则解析文本并执行命令,或者构造一个代表输入的抽象语法树.如果语法非常简单,你可以自己写这个解析器,而不是使用一些框架. 解法 在这个问题中,我们集 ...
- python源码编译 带tkinter_python通过Tkinter库实现的一个简单的文本编辑器源码
下边资料是关于python通过Tkinter库实现的一个简单的文本编辑器的内容. from tkSimpleDialog import askstring from tkFileDialog impo ...
- python中可选参数是什么意思_Python如何定义有可选参数的元类
问题 你想定义一个元类,允许类定义时提供可选参数,这样可以控制或配置类型的创建过程. 解决方案 在定义类的时候,Python允许我们使用 ``metaclass``关键字参数来指定特定的元类. 例如使 ...
- 详细介绍附代码:使用jquery,和php文件构建一个简单的在线聊天室,通过ip显示googlemap
最近学习了关于使用最为流行的jquery发送请求,在实践中以最为简单的聊天室作为测验的辅助工具,对相关网页开发有一个初步的认识,希望大家能够一起学习进步. 首先介绍一下相关文件信息和功能 ...
- 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子
在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...
- 一个Win32 API实例类(代码收集)
最近看到别人代码中一个很好的功能类,该类是一个Win32 API实例类,该类功能包括:同一程序禁止启动多次:获取任意窗体:恢复窗体状态:设置窗体焦点等. 该类很实用,与大家分享一下: 1 / ...
- python简单代码演示效果-用python画爱心及代码演示
程序员在爱情方式上表达上展现的多种多样,其中现在大火的用编程去编写个表白内容,最受欢迎了,今天小编也尝试了下,一起来看看吧~ 准备工具:python3 画爱心实施步骤: 打开编译器,写上code,代码 ...
- 使用百度AI实现视频的人流量统计(静态+动态)代码及效果演示
使用百度AI实现视频的人流量统计(静态+动态) 百度AI提供了视频监测的诸多接口,下面以人体分析-人流量统计为例介绍. 目录 使用百度AI实现视频的人流量统计(静态+动态) 必备条件 静态人流量统计 ...
最新文章
- 第二章 微服务网关基础组件 - zuul入门
- URAL 1106 Two Teams (DFS)
- 当前记录集不支持更新_不断中招的你还放心升级win10吗?wi10近期更新问题及解决办法...
- 二级c语言程序设计翻译,C语言程序设计报错英文翻译
- [19/06/07-星期五] CSS基础_布局定位背景样式
- 长城守卫 Beijing guards CERC 2004 LA3177 解题总结
- Linux多线程实践(四 )线程的特定数据
- Android ListView 实现下拉刷新上拉加载
- 【渝粤教育】国家开放大学2018年秋季 2780T遗传与育种 参考试题
- C#----接口的显式实现
- 那些年Android黑科技②:欺骗的艺术
- 红帽linux免费下载链接,redhat linux 下载大全 完全整理
- Unity UGUI坐标与世界坐标转换
- 软件测试工程师未来十年的职业规划
- 饥荒控制台输入没用_《饥荒》控制台秘籍使用方法
- 旧文重发:IP 库的那些事儿之 2013 - 2014 流水帐版~
- 国内外网站空间优劣势
- 科幻大作明日边缘首曝预告
- 数梦工场携手宁波共建创新大数据云基地
- 海尔“1000天流程再造”
热门文章
- cascade inverse (2010-01-12)
- ORM之SQLAlchemy
- mysql题目(二学年)
- Android自带语音播报+讯飞语音播报封装(直接用)
- OpenStack 通用设计思路
- 为什么要做一个靠谱的人?
- 【Android】保存Fragment切换状态
- RS-232串行口连接线 com口连接线 并口链接线 双绞线 交叉线 直连线
- mysql date_format 按不同时间单位进行分组统计
- python程序员工资低吗-程序员嫌工资低拒绝offer,HR:估计你一辈子就是个程序员...