91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python怎么創建和使用一個簡單的元類

發布時間:2021-10-18 11:56:36 來源:億速云 閱讀:153 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關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 <diesch@spamfence.net>]
# [SNIPPET_LICENSE: MIT]

# Copyright 2010 Florian Diesch <diesch@spamfence.net>
# 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 <prop>"""
        return '_%s'%prop

    def create_property(cls, name, default):
        """ creates a property named <name> with default value <default>"""
        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 <prop>"""
        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 <prop>"""
        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怎么創建和使用一個簡單的元類”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

旬阳县| 湖州市| 泸西县| 千阳县| 玉门市| 莱西市| 大同市| 吴川市| 偏关县| 巩义市| 桃源县| 香格里拉县| 莱西市| 同心县| 宁波市| 庆元县| 治县。| 富源县| 称多县| 饶阳县| 衡水市| 滦南县| 城步| 泰顺县| 林甸县| 阜新市| 莫力| 通海县| 淳安县| 洛南县| 临邑县| 宜丰县| 宣化县| 新津县| 石景山区| 寿阳县| 云阳县| 漠河县| 新蔡县| 正定县| 沛县|