python原类、类的创建过程与方法详解


Posted in Python onJuly 19, 2019

今天为大家介绍一下python中与class 相关的知识……

获取对象的类名

python是一门面向对象的语言,对于一切接对象的python来说,咱们有必要深入的学习与了解一些知识

首先大家都知道,要获取一个对象所对应的类,需要使用class来进行检索。

但如果我们只是一个简单的赋值语句,能这么使用么?让我们看下下面的代码:

num=10
string='abc'
class MainClass:
  pass
p=MainClass()
 
print(num.__class__)
# output: <class 'int'>
print(string.__class__)
# output: <class 'str'>
print(p.__class__)
# output: <class '__main__.MainClass'>

通过上面的代码我们看到了,不论我们是简单的赋值操作,还是我们自己去定义一个类,并且通过这个类生成了一个对象。我们都可以使用__class__来查询对象所对应的方法。此处应该大多数人都是了解的。继续往下走

将我们眼中的类作为对象

刚才我们通过__class的方式获取了str、int、还有我们自定义的MainClass这三个类名。

但如果我们继续把他们作为对象,那么所对应的类是谁呢?让我们打印下

print(int.__class__) # 或者这么写:print(num.__class__.__class__)
# output: <class 'type'>
print(str.__class__)
# output: <class 'type'>
print(MainClass.__class__)
# output: <class 'type'>

class 'type' 这是一个什么鬼?

它叫原类,是创造其他类的类…

有人要问了,type就是祖宗了么?还有没有祖宗的祖宗?你可以自己验证啊,按照上面的方法

print(type.__class__)
output: <class 'type'>

这下死心了啊,type这个祖宗上面没有祖宗了。哈哈….

为什么是type

type这个函数我们经常会用到,比如一个对象,我们想知道它是什么类型的,那么我们会使用type(xxx)

那么type它到底是什么?看源码喽…

class type(object):
  """
  type(object_or_name, bases, dict)
  type(object) -> the object's type
  type(name, bases, dict) -> a new type
  """
  ... ...
  ... ...

看到注释的时候我们明白了,type有两个用法

获取类型

创建新type

相信第一点,我们都经常用,否了解。

第二点是干嘛的?让我们留一个悬念,接着往下看

类的99.99%创建方法

所有人不管是java的还是Python的都明白,创建一个类么,class+类名 OK了

那么你知道你在class+类名,然后赋值或者定义实例方法的时候到底内存做了什么

class MainClass:
  name='Uranus'

这个方法应该是比pass高档一分钱不到的脑残类了。可你知道在内存中它做了什么么?

  • 首先他创建了一个变量,变量的名字叫MainClass
  • 之后python开辟了一块内存空间,用于创建一个类,类名为ClassMain
  • 将ClassMain这个变量指向ClassMain
  • 在这个方法中创建一个dict的字典
  • dict这个字典指向一个内存空间,存放着{name:Uranus}

和你们想的一样么?先不说一样不一样,估计很多人都要说我是瞎说的…没关系

介绍0.01%的类创建方法

刚才留了一个疑问,type的第二种用法,用来创建一个新的type

它是做什么的呢?让我先来演示一段代码

def func():
  return 'is a function...'
# 重点在这里
TypeClass=type('MainClass1',(),{'name':'Uranus','func':func})
 
print(TypeClass.__class__)
# output: <class 'type'>
 
print(TypeClass)
# output: <class '__main__.MainClass1'>
 
print(TypeClass.__dict__)
# output: {'__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'MainClass1' objects>, '__dict__': <attribute '__dict__' of 'MainClass1' objects>, '__doc__': None, 'func': <function func at 0x00000000024DDEA0>, 'name': 'Uranus'}
 
print(TypeClass.name)
# output: Uranus
 
print(TypeClass.func())
# output: is a function...

好了,现在告诉我,TypeClass是什么,是不是一个类?

我在type中做了什么,是不是创建类名,忽略父类,创建类属性,创建类的实例方法?

传统的class创建,知识将TypeClass这个变量名设置的和你的类名MainClass1一样而已
type的第二种方法你会了么?类的创建过程你明白了么?之前你会么?

感谢大家的阅读和对三水点靠木的支持。

Python 相关文章推荐
Python性能提升之延迟初始化
Dec 04 Python
python使用锁访问共享变量实例解析
Feb 08 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
Python中xml和json格式相互转换操作示例
Dec 05 Python
Python使用pymysql模块操作mysql增删改查实例分析
Dec 19 Python
python异常处理和日志处理方式
Dec 24 Python
Python如何在DataFrame增加数值
Feb 14 Python
使用Python FastAPI构建Web服务的实现
Jun 08 Python
解决keras backend 越跑越慢问题
Jun 18 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
Oct 12 Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 Python
Python各协议下socket黏包问题原理
Apr 12 Python
Django 全局的static和templates的使用详解
Jul 19 #Python
python之拟合的实现
Jul 19 #Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 #Python
python SVM 线性分类模型的实现
Jul 19 #Python
Django密码系统实现过程详解
Jul 19 #Python
Tensorflow实现酸奶销量预测分析
Jul 19 #Python
Python实现基于SVM的分类器的方法
Jul 19 #Python
You might like
中国的第一台收音机
2021/03/01 无线电
PHP获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
smarty学习笔记之常见代码段用法总结
2016/03/19 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
2016/05/27 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
JS实现自动切换文字的导航效果代码
2015/08/27 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
Vue 中 a标签上href无法跳转的解决方式
2019/11/12 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
Python的requests网络编程包使用教程
2016/07/11 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
python+OpenCV实现图像拼接
2020/03/05 Python
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
外语专业毕业生自我评价分享
2013/10/05 职场文书
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
受欢迎的大学生自我评价
2013/12/05 职场文书
女方离婚起诉书
2015/05/18 职场文书
护理工作心得体会
2016/01/22 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android
nginx搭建NFS网络文件系统
2022/04/14 Servers