元类metaclass(一切都是对象)
Posted huang99882008
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了元类metaclass(一切都是对象)相关的知识,希望对你有一定的参考价值。
Python类哲学:
1、一切都是对象。(everything is object)
2、所有对象object都是由类class实例化出来的。比喻:所有的人(对象)都有自己的妈(类),都是他妈生的。参照上一条,当妈的也是人也有必然有自己的妈。
3、那问题来了,最早的妈是谁,她又是谁生的?
答:人类最早的妈是女娲,但在python里最早的妈名为type,外号metaclass,又称元类。type的妈是谁,还是type,也就是type自己生了自己,type是万物本源。
4、基类object又是什么?
答:基类是所有类的父类,py3中所有的类都默认继承了基类,包括元类type。比喻:所有当妈的都有一个公共的爹,都继承了这个爹的基因。
5、怎么查看类的继承关系,即一个女人如何找到自己的爹?
答:print(类.__mro__)
6、如何通过对象找到创建它的类,即如何找到自己的妈?
答:三种方法,一是用__class__属性,对象.__class__即为创建它的类。二是用isinstance()方法,判断对象和类的关系。三是用type()方法,输出结果与第一种方法类似。
class People: def __init__(self,name,age): self.name = name self.age = age print(‘%s今年%d岁了‘%(name,age)) def __call__(self, *args, **kwargs): print(self.__dict__,type(self))
这个类里有两个内置方法:__init__,__call__
这两个都是绑定对象方法,当对象调用含有self参数的方法时,不需要手工写这个参数,自动传对象自己本身。
__init__()是在实例化过程中自动执行。对象被调用则会执行类中的__call__方法。
以上是关于元类metaclass(一切都是对象)的主要内容,如果未能解决你的问题,请参考以下文章