Python类的实现原理

简介: 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类

相关文章
|
18天前
|
数据挖掘 Python
【视频】随机波动率SV模型原理和Python对标普SP500股票指数预测|数据分享
【视频】随机波动率SV模型原理和Python对标普SP500股票指数预测|数据分享
|
18天前
|
机器学习/深度学习 人工智能 算法
机械视觉:原理、应用及Python代码示例
机械视觉:原理、应用及Python代码示例
|
18天前
|
机器学习/深度学习 人工智能 自动驾驶
人工智能:原理、应用与Python代码实现
人工智能:原理、应用与Python代码实现
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能:原理、应用与Python代码示例
人工智能:原理、应用与Python代码示例
|
3天前
|
C++ Python
Python中的类与对象
Python中的类与对象
6 1
|
6天前
|
Python
在Python中,类的属性可以分为公有属性和私有属性
Python类包含公有和私有属性。公有属性可直接外部访问,如`person.name`,而私有属性如`_name`需通过getter/setter方法访问,如`person.getName()`和`person.setName()`。私有属性用于封装数据、隐藏实现细节,增强代码可维护性和安全性。封装能灵活修改内部实现,不影响外部;安全性防止外部非法修改数据;一致性确保所有数据操作在类内完成,简化代码并减少错误。
24 10
|
6天前
|
存储 Python
【Python 基础】解释reduce函数的工作原理
【5月更文挑战第6天】【Python 基础】解释reduce函数的工作原理
|
6天前
|
Python
【Python 基础】解释map函数的工作原理
【5月更文挑战第6天】【Python 基础】解释map函数的工作原理
|
6天前
|
Python
【Python 基础】Python中的实例方法、静态方法和类方法有什么区别?
【5月更文挑战第6天】【Python 基础】Python中的实例方法、静态方法和类方法有什么区别?
|
6天前
|
存储 程序员 Python
Python中自定义类实例化数组的艺术
Python中自定义类实例化数组的艺术
8 1