python原类、类的创建过程与方法详解
作者:华为云 发布时间:2023-01-26 06:59:27
今天为大家介绍一下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的第二种方法你会了么?类的创建过程你明白了么?之前你会么?
感谢大家的阅读和对脚本之家的支持。
来源:https://blog.csdn.net/devcloud/article/details/96474514


猜你喜欢
- 本文实例讲述了Python实现的用户登录系统功能。分享给大家供大家参考,具体如下:有N,E,Q三个选择,若选择Q或者中断,则系统退出。若其他
- 前言:MySQL 有很多存储引擎(也叫数据引擎),所谓的存储引擎是指用于存储、处理和保护数据的核心服务。也就是存储引擎是数据库的底层软件组织
- isnull在数据库查询中的应用,特别是再语句连接的时候需要用到 比如连接时候,某个字段没有值但是又要左连接到其他表上 就会显示空, isn
- Dataset类是TensorFlow非常流行的存储数据的格式。常用来作为输入输出。data模块主要的用途就是通过这种方法创建Dataset
- 最近心血来潮加上有点闲情,动手写了第一个JavaScript版的俄罗斯方块Easy Tetris.先上Easy Tetris俄罗斯方块游戏截
- CSV 是一种简单的数据格式,通常为电子表格软件所使用。 它主要是由一系列的表格行组成,每行中单元格之间使用逗号(CSV 是 逗号分隔数值(
- socket服务端和客户端数据传输(TCP)服务器端:import socket#创建一个socket对象socket_server = s
- 本文实例为大家分享了JavaScript实现动态生成表格的具体代码,供大家参考,具体内容如下功能描述在输入框中输入行和列,点击按钮,生成拥有
- 我就废话不多说了,直接上代码吧!第一种def test1(): l = [] for i in range(1000
- 1.语音信号的产生与特性我们要对语音进行分析,首先要提取能够表示该语音的特征参数,有了特征参数才可能利用这些参数进行有效的处理,在对语音信号
- 在使用pymongo时遇到了一个小坑:在Flask框架中,将字典插入mongodb后再返回就报错@app.route('xxxx
- 例如,如果列a被定义为unique,并且值为1,则下列语句有同样的效果,也就是说一旦出入的记录中存在a=1的情况,直接更新c = c + 1
- 前言正则表达式的基础知识就不说了,有兴趣的可以点击这里,提取一般分两种情况,一种是提取在文本中提取单个位置的字符串,另一种是提取连续多个位置
- 修改python plot折线图的坐标轴刻度,这里修改为整数:代码如下:from matplotlib import pyplot as p
- 0x00 字符的编码计算机毕竟是西方国家的发明,最开始并没有想到会普及到全世界,只用一个字节中的7位(ASCII)来表示字符对于现在庞大的文
- 质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两
- 本文为大家分享了mysql 5.7.16 免安装版本教程,供大家参考,具体内容如下MySQL: 5.7.16 程序目
- code如下: /*! *author:sohighthesky *blog:http://www.cnblogs.com/sohighth
- 领会下面这个示例吧,其实跟java中wait/nofity是一样一样的道理import threading# 条件变量,用于复杂的线程间同步
- 一、环境准备1.CentOS配置最好是用新克隆的虚拟机 ,虚拟机内存设置大一点(我设置的4G),配置网络,主机名,关闭防火墙,关闭selin