python面向对象--04终极套娃之“类原来就是个这”

手写类的实现


道家说一生二,二生三,三生万物。而python中万物皆对象,类也是对象

一、类在内存中的样子

定义一个类其实就是在内存中划分一个地址,并将这个类名指向了这个地址的唯一引用。由这个类实例化出一个对象就是划分新的地址,让对象名指向对象的地址。那如何知道这个对象是哪个类呢,对象都有一个__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,还是类???于是我赶快百度了一下
python面向对象--04终极套娃之“类原来就是个这”python面向对象--04终极套娃之“类原来就是个这”
额,好吧这个type是个叫元类的东西,是产生类的模板,那我产生了一个大胆的想法,万物皆对象,所以元类也是对象,那他的类又是什么?
python面向对象--04终极套娃之“类原来就是个这”
终于到头了,可以看到这个type的类还是type套娃结束了…
python面向对象--04终极套娃之“类原来就是个这”

三、class Person到底做了什么

上图可以看到,类都是type实例化出来的,所以只要给type指定了他是个什么样的类,那不就能到的一个具体的类对象了吗。用代码可以看到type的提示,第二中用法
python面向对象--04终极套娃之“类原来就是个这”
这个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()

python面向对象--04终极套娃之“类原来就是个这”
居然和class Person起到了一模一样的作用,原来class就是个这,不明觉厉啊

上一篇:04-PDI(Kettle)脚本执行


下一篇:04字符串的获取相关方法