Python类的实现原理

Python类的实现原理

1、所有类的父类是Object

所有类的基类(父类)是object。在创建类的时候,可通过dir(classname)查看继承的方法。在Python中之所以没有其他语言中的类那么麻烦,绝对要归功于object函数。
因为是python3默认每个类在创建时都会继承object,所以我们利用python2来看一下

class student ------> ['__doc__', '__module__', 'name']
class teacher(object) ------>
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', 
'__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name']

以上student就是一个经典类,下面这个继承了object的类我们把它叫做新式类。其中过多的函数我们可以不去探究,如果有兴趣可以查看python源码解析。我们需要知道的是,经典类和新式类在用法上最大的区别就是(经典类–深度优先)、(新式类–广度优先)。什么意思呢?很简单的例子:当一个类A继承了两个父类B、C时,且类B、类C分别也继承了一个父类D、E,我们通过调用类A调用一个函数,已知函数存在于类E中。那么此时经典类使用深度优先则会先找完B类、D类,再找C、E类,而新式类则是广度优先先找B、C类,再找D、E类。从思维上讲,新式类会更好一些。

2、类的创建方法依赖于type类

在我们定义一个类的时候如 class Student:。那么此时其实是调用了type类。
type函数:我们通常知道type类是用于查看类型,对没错,我们查看student类的类型,如下图:

class student:
    pass

print(type(student))   
>> <class 'type'>

由上而见,其实类的创建是通过type类进行的。既然如此,我们用type类来创建一个类:

stu=type('student',(),{'data': 1})

print(type(stu))
print(stu().data)
>> <class 'type'>
>> 1

显而易见、效果是相同的。type类就是所有类的元类。
Python 真正执行的是下面这段代码:

class = type(classname, superclasses, attributedict)
这里等号右边的type(classname, superclasses, attributedict)就是 type 的__call__运算符重载,它会进
一步调用:
		type.__new__(typeclass, classname, superclasses, attributedict)
		type.__init__(class, classname, superclasses, attributedict)

所以也就证实了:类的创建方法依赖于type类

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会振刀的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值