python怎么创建和使用一个简单的元类
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章给大家分享的是有关python怎么创建和使用一个简单的元类的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。示例#!/usr/bin/env python# [SNIP
千家信息网最后更新 2025年01月19日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 setterclass 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怎么创建和使用一个简单的元类"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
内容
更多
篇文章
不错
实用
文章
看吧
知识
示例
参考
帮助
有关
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
35岁了还做软件开发吗
单位的网不能访问服务器
万方数据库也可以查询专利
数据库文件路径是什么
开展网络安全意识培训的重要性
网络技术课程精品例子
红包乐软件开发
海口派正软件开发有限公司
疫情防控网络安全自查报告
软件开发公司人员资质
网络安全标准化资料
证通电子是网络安全概念吗
智能网络技术应用平台
用服务器抢是什么
风电场各岗位网络安全职责
数据库数据修改时推送数据
软件开发外包合同封面
深圳海纳互联网科技有限公司
数据库表格和表中表的区别
软件开发设计有哪些要求
海康威视管理平台服务器
cs顺网服务器
分布式数据库要分库分表吗
反思主题网络安全
网络安全法紧急断网
网络安全 管理队伍 建设
如何找回qq群未审核数据库
谁做软件开发的
为什么主题商店显示服务器正在忙
浙江大规模软件开发方法