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类属性与实例属性用法分析
May 09 Python
Python 装饰器使用详解
Jul 29 Python
Python 找到列表中满足某些条件的元素方法
Jun 26 Python
Tensorflow 合并通道及加载子模型的方法
Jul 26 Python
Python提取特定时间段内数据的方法实例
Apr 01 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
May 13 Python
python使用配置文件过程详解
Dec 28 Python
python全局变量引用与修改过程解析
Jan 07 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
Mar 23 Python
Python动态强类型解释型语言原理解析
Mar 25 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 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
PHP ? EasyUI DataGrid 资料存的方式介绍
2012/11/07 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
bootstrap模态框消失问题的解决方法
2016/12/02 Javascript
bootstarp modal框居中显示的实现代码
2017/02/18 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
Python中使用items()方法返回字典元素对的教程
2015/05/21 Python
Python实现PS滤镜碎片特效功能示例
2018/01/24 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
pandas中去除指定字符的实例
2018/05/18 Python
Django 视图层(view)的使用
2018/11/09 Python
深入理解Python异常处理的哲学
2019/02/01 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
HTML5是否真的可以取代Flash
2010/02/10 HTML / CSS
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
彪马英国官网:PUMA英国
2019/02/11 全球购物
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
linux面试题参考答案(9)
2016/01/29 面试题
莫言获奖感言(全文)
2015/07/31 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
详解Javascript实践中的命令模式
2021/05/05 Javascript
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python