1. Python中一切皆对象
1 | 与动态语言比起来 静态语言的Python面向对象更彻底 |
函数和类也是对象,属于Python的一等公民
一等公民的特性1
2
3
41. 赋值给一个变量
2. 可以添加到集合对象中
3. 可以作为参数传递给函数
4. 可以当做函数的返回值(装饰器)
注:如果函数没有return 默认返回None
2. type、object和class的关系
我们看看一个int类型的生成关系1
2
3
4
5
6
7In [18]: a = 1
In [19]: type(a)
Out[19]: int
In [20]: type(int)
Out[20]: type
大致生成关系是1
2type->int(内置类)->1
type->class->obj
我们看看自己定义的类1
2
3
4
5
6
7In [22]: student = Mystudent()
In [23]: type(student)
Out[23]: __main__.Mystudent
In [24]: type(Mystudent)
Out[24]: type
同样遵循上面的生成关系
我们的得出的结论:1
我们使用的类是使用type生成的,我们使用的对象是使用类创建的
1 | In [26]: Mystudent.__base__ |
object是最顶层的基类,所有的类推到最后它们的父类都是object
type也是一个类,同时type也是一个对象
我们看看type和object的关系1
2
3
4
5
6
7In [27]: type.__base__
Out[27]: object
In [28]: type(object)
Out[28]: type
In [29]: object.__base__
type 的基类是 object, object是由type生成 object的基类为空
我们通过一张图来详解type object
我们从图中看到一切对象均由type实例化出来 一切对象都继承object
type实例化自己(指针指向同一个块) 因此说python中一切皆对象
3. Python中常见内置类型
对象的三个特征1
2
3
4
5
6
7
8
91. 身份 即在内存中的地址可以通过id查看
In [32]: a = 1
In [33]: id(a)
Out[33]: 4305320448
2. 类型 任何对象都有一个类型 type可以查看 a的类型是int
3. 值 比如1就是值
常见内置类型1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
261. None (全局只有一个)
Python在启动的时候会用None类型生成一个None对象
In [38]: b = None
In [39]: a = None
In [40]: id(a) == id(b)
Out[40]: True
2. 数值
int float complex(复数) bool
3. 迭代类型(可迭代)
4. 序列类型
list bytes bytearray memoryview(二进制序列)range tuple str array
5. 映射(dict)
6. 集合
set frozenset
7. 上下文管理类型(with)
8. 其他
模块类型 class和实例 函数类型 方法类型 代码类型 object对象 type类型 ellipsis类型(省略号) notimplemented类对象
java在运行之前编译的时候就可以做一些类型检查
而Python没有编译 只有运行的时候才知道类型。