Python中一切皆对象

1. Python中一切皆对象
1
2
3
与动态语言比起来 静态语言的Python面向对象更彻底
在java中对象时由class实例化,而在Python中class也是对象
类 函数 代码 模块也是对象(可以理解为由模板生成对象)

函数和类也是对象,属于Python的一等公民

一等公民的特性

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

注:如果函数没有return 默认返回None

2. type、object和class的关系

我们看看一个int类型的生成关系

1
2
3
4
5
6
7
In [18]: a = 1

In [19]: type(a)
Out[19]: int

In [20]: type(int)
Out[20]: type

大致生成关系是

1
2
type->int(内置类)->1
type->class->obj

我们看看自己定义的类

1
2
3
4
5
6
7
In [22]: student = Mystudent()

In [23]: type(student)
Out[23]: __main__.Mystudent

In [24]: type(Mystudent)
Out[24]: type

同样遵循上面的生成关系

我们的得出的结论:

1
我们使用的类是使用type生成的,我们使用的对象是使用类创建的

1
2
In [26]: Mystudent.__base__
Out[26]: object

object是最顶层的基类,所有的类推到最后它们的父类都是object
type也是一个类,同时type也是一个对象

我们看看type和object的关系

1
2
3
4
5
6
7
In [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实例化出来 一切对象都继承object
type实例化自己(指针指向同一个块) 因此说python中一切皆对象

3. Python中常见内置类型

对象的三个特征

1
2
3
4
5
6
7
8
9
1. 身份 即在内存中的地址可以通过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
26
1. 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没有编译 只有运行的时候才知道类型。

知识就是财富
如果您觉得文章对您有帮助, 欢迎请我喝杯水!