返回顶部
首页 > 资讯 > 后端开发 > Python >什么是python中的元类
  • 337
分享到

什么是python中的元类

python 2023-01-31 00:01:48 337人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

所属网站分类: python高级 > 面向对象 作者:Goodbody 原文链接: Http://www.Pythonheidong.com/blog/article/11/ 来源:python黑洞网 www.pythonh

所属网站分类: python高级 > 面向对象


作者:Goodbody

原文链接: Http://www.Pythonheidong.com/blog/article/11/

来源:python黑洞网 www.pythonheidong.com

 

元类是类的类。就像类定义了类的实例的行为一样,元类定义了类的行为方式。类是元类的实例。

虽然在Python中你可以为元类使用任意的callables,实际上更有用的方法是使它成为一个真正的类本身。

type是Python中常用的元类。type它本身就是一个类,它是它自己的类型。

你将无法使用type在Python中重新创建纯粹的东西。

元类最常用作类工厂。就像通过调用类创建类的实例一样,Python通过调用元类创建了一个新类(当它执行'class'语句时)。结合__init__和__new__方法,元类因此允许您在创建类时执行“额外的事情”,例如使用某个注册表注册新类,或者甚至完全用其他内容替换类。

 

元类是通过查看待定类的基类(继承的元类),__metaclass__将要在类的属性(如果有)或__metaclass__全局变量来确定的。然后使用类的名称,基数和属性调用元类来实例化它。

 

但是,元类实际上定义了类的类型,而不仅仅是它的工厂,所以你可以用它们做更多的事情。例如,您可以在元类上定义常规方法。这些元类方法就像类方法一样,因为它们可以在没有实例的类上调用,但它们也不像类方法,因为它们不能在类的实例上调用。type.__subclasses__()是type元类的方法示例。您还可以定义常规的“魔术”方法,例如__add__,__iter__以及__getattr__实现或更改类的行为方式。

这是例示:

 

def make_hook(f):
    """Decorator to turn 'foo' method into '__foo__'"""
    f.is_hook = 1
    return f

class MyType(type):
    def __new__(mcls, name, bases, attrs):

        if name.startswith('None'):
            return None

        # Go over attributes and see if they should be renamed.
        newattrs = {}
        for attrname, attrvalue in attrs.iteritems():
            if getattr(attrvalue, 'is_hook', 0):
                newattrs['__%s__' % attrname] = attrvalue
            else:
                newattrs[attrname] = attrvalue

        return super(MyType, mcls).__new__(mcls, name, bases, newattrs)

    def __init__(self, name, bases, attrs):
        super(MyType, self).__init__(name, bases, attrs)

        # classreGIStry.register(self, self.interfaces)
        print "Would register class %s now." % self

    def __add__(self, other):
        class AutoClass(self, other):
            pass
        return AutoClass
        # Alternatively, to autogenerate the classname as well as the class:
        # return type(self.__name__ + other.__name__, (self, other), {})

    def unregister(self):
        # classregistry.unregister(self)
        print "Would unregister class %s now." % self

class MyObject:
    __metaclass__ = MyType


class NoneSample(MyObject):
    pass

# Will print "NoneType None"
print type(NoneSample), repr(NoneSample)

class Example(MyObject):
    def __init__(self, value):
        self.value = value
    @make_hook
    def add(self, other):
        return self.__class__(self.value + other.value)

# Will unregister the class
Example.unregister()

inst = Example(10)
# Will fail with an AttributeError
#inst.unregister()

print inst + inst
class Sibling(MyObject):
    pass

ExampleSibling = Example + Sibling
# ExampleSibling is now a subclass of both Example and Sibling (with no
# content of its own) although it will believe it's called 'AutoClass'
print ExampleSibling
print ExampleSibling.__mro__

 




 

--结束END--

本文标题: 什么是python中的元类

本文链接: https://www.lsjlt.com/news/182374.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 什么是python中的元类
    所属网站分类: python高级 > 面向对象 作者:goodbody 原文链接: http://www.pythonheidong.com/blog/article/11/ 来源:python黑洞网 www.pythonh...
    99+
    2023-01-31
    python
  • python中的元组是什么
    元组是Python中的一种数据类型,用于存储多个元素的有序集合。元组是不可变的,这意味着一旦创建,就不能修改其元素。元组使用圆括号来...
    99+
    2023-10-11
    python
  • C++中类的友元机制是什么
    这篇文章主要为大家详细介绍了C++中类的友元机制是什么,文中示例代码介绍的非常详细,具有一定的参考价值,发现的小伙伴们可以参考一下:类的友元  友元是C++提供的一种破坏数据封装和数据隐藏的机制。  通过将一个模块声明为另一个模块的友元,一...
    99+
    2023-06-06
  • python中的元类
    目录 元类 什么是元类 自定义元类 其他 元类 什么是元类 我们创建一个类目的是为了...
    99+
    2023-01-30
    python
  • CSS中的伪类及伪元素是什么
    本篇内容介绍了“CSS中的伪类及伪元素是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  ...
    99+
    2024-04-02
  • python中元组的特点是什么
    这篇文章主要介绍“python中元组的特点是什么”,在日常操作中,相信很多人在python中元组的特点是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python中元组的特点是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-20
  • Python元类是怎么创建一个类的
    本篇内容介绍了“Python元类是怎么创建一个类的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如果你看过比较优秀的 Python 开源框架...
    99+
    2023-06-15
  • Python中的类到底是什么
    这篇文章主要介绍“Python中的类到底是什么”,在日常操作中,相信很多人在Python中的类到底是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的类到底是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-15
  • python中类的用法是什么
    在Python中,类是一种数据结构,用来封装数据和行为。类定义了对象的属性和方法,可以创建多个具有相同属性和方法的对象实例。类的用法...
    99+
    2024-04-02
  • Golang 中函数类型的组成元素是什么?
    go语言函数类型由函数名、输入参数列表、输出参数列表、返回值类型组成。语法:func 函数名(入参列表) (出参列表) 返回值类型;实战:摄氏度转华氏度函数示例:func celsius...
    99+
    2024-04-21
    函数类型 组成元素 golang go语言
  • python中什么是新式类
    这篇文章给大家介绍python中什么是新式类,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌入式应用开发;5、游戏开...
    99+
    2023-06-14
  • python中的五类参数是什么
    这篇文章主要介绍python中的五类参数是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!函数的五类参数使用例子python五类参数:位置参数,关键字参数,默认参数,可变位置与关键...
    99+
    2024-04-02
  • python中基类的作用是什么
    python中基类的作用是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该...
    99+
    2023-06-14
  • Python中Thread类的作用是什么
    本篇文章为大家展示了Python中Thread类的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python Thread类表示在单独的控制线程中运行的活动。有两种方法可以指定这种活动,给...
    99+
    2023-06-17
  • Python类中self的含义是什么
    在Python中,`self`是一个惯用的参数名,用于表示对象自身。它在类的方法中作为第一个参数传递,用于访问该对象的属性和方法。当...
    99+
    2023-10-12
    Python
  • python类指的是什么
    这篇文章主要介绍python类指的是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写自动化脚本...
    99+
    2023-06-14
  • python元组的优势是什么
    小编给大家分享一下python元组的优势是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python的数据类型有哪些python的数据类型:1. 数字类型,包...
    99+
    2023-06-14
  • python元组的定义是什么
    Python元组是一个不可变的有序序列,可以包含多个元素,每个元素可以是不同的数据类型。元组使用圆括号来定义,元素之间使用逗号分隔。...
    99+
    2023-10-23
    python
  • python元编程指的是什么
    Python元编程是指在Python中编写能够操作、创建和修改Python代码的代码。它允许程序在运行时动态地创建和修改代码,以便实...
    99+
    2023-10-25
    python
  •  python中的元类metaclass怎么使用
    今天小编给大家分享一下 python中的元类metaclass怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作