python中的一切皆对象
python中一切皆对象是这个语言灵活的根本。
函数和类也是对象,属于python的一等公民。
包括代码包和模块也都是对象。
python的面向对象更加彻底。
可以赋值给一个变量
可以添加到集合对象中
可以作为参数传递给函数
可以当作函数的返回值
在python中什么不是对象?
字符串是类str的对象
数字是类int的对象
元组是类tuple的对象
列表是类list的对象
字典是类dict的对象
函数是类function的对象
类是type的对象
将一个函数当作返回值的时候就是闭包,也就是装饰器的实现原理。
在python中,基础的数据类型(list,tuple,dict等)都是使用c++编写的,所以性能会非常高。
一、type/object/class
1.type和class
>>> a = 1
>>> type(a)
<class 'int'>
>>> type(int)
<class 'type'> >>> b = ""
>>> type(b)
<class 'str'>
>>> type(str)
<class 'type'> >>> c = [1,2,3]
>>> type(c)
<class 'list'>
>>> type(list)
<class 'type'> >>> d = (1,2,3)
>>> type(d)
<class 'tuple'>
>>> type(tuple) <class 'type'>
>>> d = {"name":"kebi","age":18}
>>> type(d)
<class 'dict'>
>>> type(dict)
<class 'type'>
在python中基础数据类型有:字符串、数字、元组、列表、字典、集合等
它们分别由类str、int、tuple、list、dist、set实例出来的对象。
而类str、int、tuple、list、dist、set本身也是对象,它们都是由type这个创造创造出来的。
对于函数来说:
函数都是由类function创造出来的。
>>> def func():
... pass
...
>>> type(func)
<class 'function'>
>>> type(func())
<class 'NoneType'>
>>> type(function)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'function' is not defined
问题:
function这个类是怎么来的了?如果function是一个对象,那么为什么不能使用type打印类型。
原因也许是function超出了type的范围,因为它不是type创造的。类似的还有NoneType
对于类来说:
类都是由type创造出来
>>> class Person:
... pass
...
>>> type(Person)
<class 'type'>
>>> type(Person()) #对象由类创建
<class '__main__.Person'>
既然type创造了如此多的类,那么type是怎么来的?
>>> type(type)
<class 'type'> #自己创造自己
在python中,type有两个功能:
a.打印对象的类型
b.创造类
虽然上述代码并没有解释清楚一切对象的来源,但是很多的说明了type和class的关系——“type就是用来创造类的”
2.object
>>> print(int.__bases__)
(<class 'object'>,)
>>> print(str.__bases__)
(<class 'object'>,) >>> print(Person.__bases__) #默认继承object
(<class 'object'>,)
>>> class AnluPerson(Person):
... pass
...
>>> print(AnluPerson.__bases__)
(<class '__main__.Person'>,)
object是最顶层的基类。 >>> print(type.__bases__) #type的父类是object
(<class 'object'>,)
>>> type(object) #object又是由type创造出来的
<class 'type'>
>>> print(object.__bases__)
()
>>> type(type) #type自己创造自己
<class 'type'>
关于type、object、class之间的关系示意图:

在python中,基础数据类型的类都是type的实例,type自生也是type的实例。
基础数据类型的类都是继承object。
对于function等先不管,我们可以说一切皆对象,一切都是type的对象,object是所有类的基类。
二、python中常见的数据类型
1.None 全局只有一个
2.数值
• int
• float
• complex
• bool
3.迭代类型
4.序列类型
• list
• bytes、bytearray、memoryview(二进制序列)
• range
• tuple
• str
• array
5.映射(dict)
6.集合类型 dict与set实现原理相似,性能很高
• set
• frozenset
7.上下文管理类型(with)
8.其它
• 模块类型
• class和实例
• 函数类型
• 方法类型
• 代码类型
• object类型
• type类型
• ellipsis类型(省略号)
• notimplemented类型
python中的一切皆对象的更多相关文章
- 第二章python中的一切皆对象
1.函数和类也是对象,属于python的一等公民 赋值给一个变量 可以添加到集合对象之中 可以作为参数传递给函数 可以当作函数的返回值 def ask(name="ask_wzh" ...
- 一、python中的一切皆对象
1.函数和类是对象,是Python中的一级公民 (1)将函数和类赋值给一个变量 将函数或类赋值给一个变量,就可以把该变量当成函数或类来使用 def ask(name): print(name) cla ...
- Python中的变量引用对象需注意的几点
Python中的变量引用对象需注意的几点 分类:Python (55) (0) 普通引用: Python中,变量的作用仅仅是一个标识,只有赋值后才被创建,它可以引用任何类型的对象,而且在引用之前必须 ...
- Python中的可迭代对象
Python中的可迭代对象有:列表.元组.字典.字符串:常结合for循环使用: 判断一个对象是不是可迭代对象: from collections import Iterable isinstanc ...
- python中的类,对象,方法,属性等介绍
注:这篇文章写得很好.加底纹的是我自己的理解 python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性( ...
- python 变量作用域 v.__sizeof__() python 深复制 一切皆对象 尽量减少内存消耗
python 深入理解 赋值.引用.拷贝.作用域 - 江召伟 - 博客园 https://www.cnblogs.com/jiangzhaowei/p/5740913.html a=[1,2,5]b= ...
- 初识python中的类与对象
这篇博客的路线是由深入浅,所以尽管图画的花花绿绿的很好看,但是请先关注我的文字,因为初接触类的小伙伴直接看类的实现可能会觉得难度大,只要耐着性子看下去,就会有一种“拨开迷雾看未来”的感觉了. 一.py ...
- 实习小记-python中不可哈希对象设置为可哈希对象
在这篇之前,我又专门翻译过官方python3.3的可哈希对象文档,大家可以先参考一下: 实习小记-python中可哈希对象是个啥?what is hashable object in python? ...
- python中的is, ==与对象的相等判断
在java中,对于两个对象啊a,b,若a==b表示,a和b不仅值相等,而且指向同一内存位置,若仅仅比较值相等,应该用equals.而在python中对应上述两者的是‘is’ 和‘==’. (1) py ...
随机推荐
- [转帖]比特币本质其实是UTXO
比特币本质其实是UTXO https://www.jianshu.com/p/7071e68c5262 其实并没有什么比特币,我们在交易所里或者钱包里显示的比特币余额其实是UTXO.那到底什么是UTX ...
- 你应该掌握linux中Bash命令的一些快捷方式
在本文中,我们将分享许多对任何Linux用户都有用的Bash命令行快捷方式.这些快捷方式可以快速地执行某些动作,例如访问和运行先前执行的命令,打开编辑器,在命令行上编辑/删除/更改文本,移动光标,控制 ...
- 10 IO流(七)——copy方法封装、关闭流方法封装的两种方式以及try...with...resource
前言 本文将上一节做的代码,对copy方法与关闭流方法进行封装,并使用try...with...resource关闭流. copy方法封装 我们将copy方法封装,使得只需传入两个流,就能将输入流的源 ...
- (一)Django项目的目录结构
1.将app放在apps文件夹中,将改文件夹设置为 source root,便于引用.两个app不可以互相引用,可以利用第三个app实现一些操作. 2.将一些多媒体文件放在media中的相应app名称 ...
- redis GEO的使用
一.概念 redis的GEO特性在Redis3.2版本发布,这个功能可以将用户给定的地理位置信息储存起来,并对这些信息进行操作. GEO常用语LBS(Location Based Service),基 ...
- 全栈项目|小书架|服务器开发-Koa2中间件机制洋葱模型了解一下
KOA2 是什么? Koa是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小.更富有表现力.更健壮的基石. 通过利用 asyn ...
- JDBC使用8.0驱动包连接mysql设置时区serverTimezone
驱动包用的是新版 mysql-connector-java-8.0.16.jar新版的驱动类改成了com.mysql.cj.jdbc.Driver新版驱动连接url也有所改动I.指定时区 如果不设置时 ...
- 实时监听 JavaScript改变 input 值 input输入框内容 value 变化实时监听
思路:通过setInterval()方法去定时对比新旧值 当时候JavaScript的onchange 和onpropertychange(注意ie版本) 监听输入框input时间,人为改变值是可以触 ...
- 【转载】C#中List集合使用Remove方法移除指定的对象
在C#的List集合操作中,有时候需要将特定的对象或者元素移除出List集合序列中,此时可使用到List集合的Remove方法,Remove方法的方法签名为bool Remove(T item),it ...
- 纯CSS一个div实现无缝隙尖角框
话不多说直接先上效果图 其实原理很简单,就是一个带边框的方块加上一个黑色三角形和一个白色三角形,最后通过position定位实现. 代码如下: HTML就一个div <div></d ...