在做工程闲暇时间,将做工程过程比较重要的一些内容备份一下,如下内容段是关于演示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如何创建和使用一个简单的元类的代码相关推荐

  1. Java Web创建并运行一个简单的网页

    @创建并运行一个简单的网页TOC 在使用eclipse创建运行一个web项目前,需安装和配置好Tomcat和jre. 1.新建一个项目 2.选择过滤器文本Dynamic Web Project 3.输 ...

  2. 《Python Cookbook 3rd》笔记(2.19):实现一个简单的递归下降分析器

    实现一个简单的递归下降分析器 问题 你想根据一组语法规则解析文本并执行命令,或者构造一个代表输入的抽象语法树.如果语法非常简单,你可以自己写这个解析器,而不是使用一些框架. 解法 在这个问题中,我们集 ...

  3. python源码编译 带tkinter_python通过Tkinter库实现的一个简单的文本编辑器源码

    下边资料是关于python通过Tkinter库实现的一个简单的文本编辑器的内容. from tkSimpleDialog import askstring from tkFileDialog impo ...

  4. python中可选参数是什么意思_Python如何定义有可选参数的元类

    问题 你想定义一个元类,允许类定义时提供可选参数,这样可以控制或配置类型的创建过程. 解决方案 在定义类的时候,Python允许我们使用 ``metaclass``关键字参数来指定特定的元类. 例如使 ...

  5. 详细介绍附代码:使用jquery,和php文件构建一个简单的在线聊天室,通过ip显示googlemap

    最近学习了关于使用最为流行的jquery发送请求,在实践中以最为简单的聊天室作为测验的辅助工具,对相关网页开发有一个初步的认识,希望大家能够一起学习进步.        首先介绍一下相关文件信息和功能 ...

  6. 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  7. 一个Win32 API实例类(代码收集)

    最近看到别人代码中一个很好的功能类,该类是一个Win32 API实例类,该类功能包括:同一程序禁止启动多次:获取任意窗体:恢复窗体状态:设置窗体焦点等. 该类很实用,与大家分享一下:  1     / ...

  8. python简单代码演示效果-用python画爱心及代码演示

    程序员在爱情方式上表达上展现的多种多样,其中现在大火的用编程去编写个表白内容,最受欢迎了,今天小编也尝试了下,一起来看看吧~ 准备工具:python3 画爱心实施步骤: 打开编译器,写上code,代码 ...

  9. 使用百度AI实现视频的人流量统计(静态+动态)代码及效果演示

    使用百度AI实现视频的人流量统计(静态+动态) 百度AI提供了视频监测的诸多接口,下面以人体分析-人流量统计为例介绍. 目录 使用百度AI实现视频的人流量统计(静态+动态) 必备条件 静态人流量统计 ...

最新文章

  1. 第二章 微服务网关基础组件 - zuul入门
  2. URAL 1106 Two Teams (DFS)
  3. 当前记录集不支持更新_不断中招的你还放心升级win10吗?wi10近期更新问题及解决办法...
  4. 二级c语言程序设计翻译,C语言程序设计报错英文翻译
  5. [19/06/07-星期五] CSS基础_布局定位背景样式
  6. 长城守卫 Beijing guards CERC 2004 LA3177 解题总结
  7. Linux多线程实践(四 )线程的特定数据
  8. Android ListView 实现下拉刷新上拉加载
  9. 【渝粤教育】国家开放大学2018年秋季 2780T遗传与育种 参考试题
  10. C#----接口的显式实现
  11. 那些年Android黑科技②:欺骗的艺术
  12. 红帽linux免费下载链接,redhat linux 下载大全 完全整理
  13. Unity UGUI坐标与世界坐标转换
  14. 软件测试工程师未来十年的职业规划
  15. 饥荒控制台输入没用_《饥荒》控制台秘籍使用方法
  16. 旧文重发:IP 库的那些事儿之 2013 - 2014 流水帐版~
  17. 国内外网站空间优劣势
  18. 科幻大作明日边缘首曝预告
  19. 数梦工场携手宁波共建创新大数据云基地
  20. 海尔“1000天流程再造”

热门文章

  1. cascade inverse (2010-01-12)
  2. ORM之SQLAlchemy
  3. mysql题目(二学年)
  4. Android自带语音播报+讯飞语音播报封装(直接用)
  5. OpenStack 通用设计思路
  6. 为什么要做一个靠谱的人?
  7. 【Android】保存Fragment切换状态
  8. RS-232串行口连接线 com口连接线 并口链接线 双绞线 交叉线 直连线
  9. mysql date_format 按不同时间单位进行分组统计
  10. python程序员工资低吗-程序员嫌工资低拒绝offer,HR:估计你一辈子就是个程序员...