定义一个类其实就是在内存中划分一个地址,并将这个类名指向了这个地址的唯一引用。由这个类实例化出一个对象就是划分新的地址,让对象名指向对象的地址。那如何知道这个对象是哪个类呢,对象都有一个__class__的属性,可以关联到自己的类
既然可以通过__class__找到自己的类,对象也是类,那类的类是谁呢?我陷入了沉思,于是代码撸了一把发现了端倪
a = 10 b = "YYDS" class Person: pass p = Person() print(a.__class__) # 10这个对象的类是int print(int.__class__) # int类对象的类是什么? print(b.__class__) # "YYDS"的类是str print(str.__class__) # str类对象的类是什么? print(p.__class__) # p对象的类是Person print(Person.__class__) #Person类对象的类又是什么?
这几个问题,让我想到了吕秀才…然而python给了我完美的答案,类对象的类都是type,还是类???于是我赶快百度了一下
额,好吧这个type是个叫元类的东西,是产生类的模板,那我产生了一个大胆的想法,万物皆对象,所以元类也是对象,那他的类又是什么?
终于到头了,可以看到这个type的类还是type套娃结束了…
上图可以看到,类都是type实例化出来的,所以只要给type指定了他是个什么样的类,那不就能到的一个具体的类对象了吗。用代码可以看到type的提示,第二中用法
这个name不就是给类取个名,dict就是类的类属性,方法等啊,至于tuple其实是这个类想要继承的父类
def eat(self): print(self.name + "在吃饭") Person = type("Person", (), {"age": "18", "eat": eat}) print(Person.__class__) p = Person() p.name = "张三" p.eat()
居然和class Person起到了一模一样的作用,原来class就是个这,不明觉厉啊