python深入学习(1):一切皆对象

95 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情

一,python如何进阶

  • 和大神一起
  • 阅读优秀源码
  • 面试,多做项目
  1. 应对 python 高级工程师面试
  2. 从深度和广度都扩充自己的只是体系
  3. 能应对各种难度的框架和库的源码
  4. 深入理解 python 的设计理念和背后的原理

asyncyio 可以让我们开发出媲美 gonodejs高并发的服务器

二,python一切皆对象

python 中的面向对象是最彻底的面向对象

函数和类也是对象,属于python一等共鸣

  1. 赋值给一个变量
  2. 可以添加到集合对象中
  3. 可以作为参数传递给函数
  4. 可以当作函数的返回值

三,type,object,和class的关系

typepython中一切皆对象的根源,一种用法是返回一个对象的数据类型,另一种是生成类

>>> a = 1>>> type(a)		②
<class 'int'>
>>> type(int)
<class 'type'>

>>> b = 'a'
>>> type(b)
<class 'str'>
>>> type(str)
<class 'type'>

>>> l = [1, 2, 3]
>>> type(l)
<class 'list'>
>>> type(list)
<class 'type'>

① 内存中创建一个变量a,存放数值1的地址

② 查看数值类型,发现 1 是由 int类 实例的对象

③ 查看 int类 的数据类型,发现 int类 是由 type类 实例的对象

由此可推断

>>> class Student:
...     pass
...
>>> stu = Student()			# stu 是 Student 类的实例
>>> type(stu)
<class '__main__.Student'>
>>> Student.__bases__
(<class 'object'>,)			# 默认继承 object 类
>>> class MyStudent(Student):
...     pass
...
>>> MyStudent.__bases__
(<class '__main__.Student'>,)
>>> type.__bases__			# type 的父类是 object
(<class 'object'>,)
>>> type(object)			# 我们又发现 object 是居然又是 type 的实例!!!
<class 'type'>
>>> object.__bases__		# object的基类为空
()

>>> s = type
>>> s
<class 'type'>
>>> dir(s)
['__abstractmethods__', '__base__', '__bases__', '__basicsize__', '__call__', '__class_
_', '__delattr__', '__dict__', '__dictoffset__', '__dir__', '__doc__', '__eq__', '__fla
gs__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '_
_init_subclass__', '__instancecheck__', '__itemsize__', '__le__', '__lt__', '__module__
', '__mro__', '__name__', '__ne__', '__new__', '__prepare__', '__qualname__', '__reduce
__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclassch
eck__', '__subclasses__', '__subclasshook__', '__text_signature__', '__weakrefoffset__'
, 'mro']

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8HM7Gm42-1592056433231)(assets/.png)]

python 中一切皆对象,是因为所有的类,函数,数据类型都是 type 的的实例,因为是实例,可以随时修改,进行赋值等等操作,甚至连 type 自己都把自己实例成自己的对象(通过指针)

objecttype 的实例,type 实例化自己(通过指针实现),并且继承 object,又因为所有类都默认继承 object 类,所有是任何类的基类,换句话说,python 中所有的对象都是 type 的实例

③ 因为所有的实例都是对象,能够被修改,能够被赋值给别的变量,所以 python 中的一切皆对象是最彻底的

三,python中的常见内置类型

>>> a = 1
>>> id(a)
1626833008

对象的三个特征:1. 身份(id函数查看) 2. 类型(int, str..) 3. 值(通常是指针指向一个内存地址) 1

  1. None 全局只有一个

    >>> a = None
    >>> b = None
    >>> id(a), id(b)
    (1626373424, 1626373424)
    
  2. 数值类型

  3. 迭代类型

  4. 序列类型

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nyfZPIPm-1592056433234)(assets/.png)]

  5. 映射类型

  6. 集合

    1. 可修改集合(set)
    2. 不可修改集合(frozenset)
  7. 上下文管理类型

  8. 其他

在这里插入图片描述

setdict 的效率,性能非常高,用 in 做判断最好用 in {}