python 元类与object_Python 元类metaclass 和 基类(超类)object

import os

'''

Python 基类和元类

- 看了那么多问答, 其实我还是晕的. 其实单纯看一个的话我是理解了, 但是两个放一起, 就懵了. 想的脑袋都疼

- 基类 object:

- python 类继承关系的顶端, object.__bases__ 它的继承为空(), 也就是它是所有类的爸爸或者爷爷..., 所有类以它为起点

- 然后. Python一切皆对象, 所以 object 也是对象, 是对象就有实现类.

- 所以: object.__class__ 它的实现类是type

- 元类(metaclass) type:

- 单独来看, 元类挺简单的, 就是类工厂, 创建类的东西

- 元类是类的类。类定义类的实例(即对象)的行为,而元类定义类的行为。类是元类的实例。

- class关键字就是使用元类通过__new__和__init__创建出一个类

- 元类的还有一个作用就是定义类型, 定义object(对象的类型)

- 一起来看就很奇怪, 也是我没有理解的地方

- object是type的实例

- type继承object

- type是type自己的实例

- 代码:

object.__class__

type.__class__

object.__bases__

()

type.__bases__

(,)

'''

'''

stack over flow 关于元类的回答:

元类是类的类。类定义类的实例(即对象)的行为,而元类定义类的行为。类是元类的实例。

尽管在Python中您可以对元类使用任意可调用对象(例如Jerub演示),但是更好的方法是使其成为实际的类。

type是Python中常见的元类。type它本身是一个类,并且是它自己的类型。您将无法type纯粹在Python中重新创建类似的内容,但是Python有点作弊。

要在Python中创建自己的元类,您实际上只想将其子类化type。

元类最常用作类工厂。当通过调用类创建对象时,Python通过调用元类来创建一个新类(当执行“ class”语句时)。

因此,将元类与普通方法__init__和__new__方法结合使用,可以使您在创建类时做“额外的事情”,例如使用某些注册表注册新类或将其完全替换为其他类。

当class执行语句时,Python首先将class语句的主体作为普通代码块执行。生成的名称空间(字典)保留了将来类的属性。通过查看要成为类的基类(继承了元类),

要成为类的__metaclass__属性(如果有)或__metaclass__全局变量来确定元类。然后使用该类的名称,基数和属性调用该元类以实例化它。

但是,元类实际上定义了一个类的类型,而不仅仅是它的工厂,因此您可以使用它们做更多的事情。

例如,您可以在元类上定义常规方法。这些元类方法就像类方法,因为它们可以在没有实例的情况下在类上调用,但是它们也不像类方法,因为它们不能在类的实例上被调用。

type.__subclasses__()是type元类上方法的示例。您还可以定义正常的“魔力”的方法,如__add__,__iter__和__getattr__,执行或如何变化的类的行为。

'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值