前言:在Python当中,一切皆对象
1. 在Python当中,一切皆对象。
类和函数也都是对象,是Python的一等公民。
一等公民具备的特征如下:
- 可以赋值给一个变量。
- 可以添加到集合当中
- 可以作为参数传递给函数
- 可以作为函数的返回值
def ask(name="body"):
print(name)
class Person:
def __init__(self):
print("body1")
def decorator_func():
print("dec start")
return ask
my_ask = decorator_func()
my_ask("tom")
obj_list = []
obj_list.append(ask)
obj_list.append(Person)
for item in obj_list:
print(item())
my_func = ask
my_func()
my_person = Person
my_person()
输出:
E:\anaconda\python.exe "E:/PyCharm 2017.3.7/workspace/sample/chapter01/all_is_object.py"
dec start
tom
body
None
body1
<__main__.Person object at 0x0000018F5E866780>
body
body1
Process finished with exit code 0
2. type,object和class的关系
先来看如下关系:
从上图中可以看出:type->int->1; type->class->obj
再来看看object对象:
在类没有继承一个基类的时候,会默认继承object类。object是最顶层基类,所有的类推导到最后都会集成object。
那么问题来了,type也是一个类,同时它也是一个对象,那么type和object是什么关系?
所以,一个很有意思的结论是:object是type的一个实例,而type又是继承自object。
总结如下图:
3. Python当中的内置类型
1. 对象的三个特征:
- 身份:对象在内存当中的地址,可以通过id(obj)函数来查看对象的内存地址。
- 类型:比如说1是int类型。
- 值:a=1 1就是a对象的值。
2. Python当中的内置类型
- None: 全局里只有一个。a = None b = None a==b 值为True
- 数值:int/float/complex/bool
- 迭代类型:最著名的就是Python的迭代器了
- 序列类型:list/(bytes,bytearray,memoryview(二进制序列))/range/tuple/str/array
- 映射类型:dict
- 集合:set/frozenset
- 上下文管理类型:with
- 其它:模块/class和实例/函数类型/方法类型/代码类型/object对象/type类型/ellipsis类型/notimplemented类对象