元类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__方法。

猜你喜欢

转载自www.cnblogs.com/huang99882008/p/9313315.html