Python教程

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

本文主要是介绍python面向对象--04终极套娃之“类原来就是个这”,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

手写类的实现

  • 一、类在内存中的样子
  • 二、套娃开始
  • 三、class Person到底做了什么

道家说一生二,二生三,三生万物。而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,还是类???于是我赶快百度了一下
在这里插入图片描述在这里插入图片描述
额,好吧这个type是个叫元类的东西,是产生类的模板,那我产生了一个大胆的想法,万物皆对象,所以元类也是对象,那他的类又是什么?
在这里插入图片描述
终于到头了,可以看到这个type的类还是type套娃结束了…
在这里插入图片描述

三、class Person到底做了什么

上图可以看到,类都是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就是个这,不明觉厉啊

这篇关于python面向对象--04终极套娃之“类原来就是个这”的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!