# 第二章:Python 一切皆对象
# 2.1 python中一切皆对象
# 一切皆对象是python灵活性的根本
- python是动态语言,面向对象更加彻底
- 函数和类也是对象,属于python的一等公民
一等公民特性
- 赋值给一个变量
- 可以添加到集合对象中
- 可以作为参数传递给函数
- 可以当做函数的返回值
def bar(name):
print('Hello %s' % name)
class Person(object):
def __init__(self, name):
print('Hello %s' % name)
def decorator_func():
print('from decorator_func')
return bar
def print_type(obj):
print(type(obj))
# 赋值给一个变量
func = bar
func('Linda')
my_class = Person
my_class('Tom')
# 可以添加到集合对象中
obj_list = []
obj_list.append(bar)
obj_list.append(Person)
for item in obj_list:
# 可以作为参数传递给函数
print_type(item)
# 可以当做函数的返回值
deco_bar = decorator_func()
deco_bar('deco_bar')
# 小试牛刀
实际项目中定义Model来管理存储的数据,可以在Model层之上加一些元操作函数,如get,update,delete等等
定义handle接收函数预处理数据
def get_record_by_id(_id, handle=None):
record = Model.get(id=_id)
if not record:
return False, '无相关记录'
if handle:
record = handle(record)
return True, record.to_dict
# 2.2 type、object和class之间的关系
# type 实例化常见类型
>>> name = 'linda'
>>> type(name)
<class 'str'>
>>> type(str)
<class 'type'>
>>> type(object)
<class 'type'>
>>> type(type)
<class 'type'>
- 类 str 实例化 'linda'
- 类 type 实例化 str
- 类 type 实例化 object
- 类 type 实例化 type (具体实现 类似C语言指针)
# object 是最顶层基类
>>> int.__bases__
(<class 'object'>, )
>>> type.__bases__
(<class 'object'>, )
>>> object.__bases__
()
- 类 str 继承 object
- 类 type 继承 object
- object.__bases__ 值为 ()
# type、object、class关系图
- 把 list,dict 等类做成对象,后续修改特别方便
- object 是所有类的基类,type 也要继承它
- type 也是自身的实例,一切皆对象,一切继承object
# 2.3 python 中的内置类型
# 对象的三个特征
- 身份,对象在内存中的地址
- 类型,每个对象都应该有个类型,分类思想
- 值,度量大小
>>> name = 'linda'
>>> id(name)
2247760594928
>>> type(name)
<class 'str'>
>>> name
'linda'
# python 常见数据类型
- None(全局只有一个),即解释器启动时定义
- 数值:int、float、complex、bool
- 迭代类型
- 序列类型:list、tuple、str、bytes
- 映射类型:dict
- 集合类型:set、frozenset
- 上下文管理类型:with语句
- 其他:模块类型、class和实例、函数类型、方法类型、代码类型、object对象、type类型、notimplemented类型
set和dict.keys()实现原理相同,较快
# 小试牛刀
问:这些常见类型是划分的本质是什么呢,又如何自定义这些类型呢
答: 魔法函数
# 2.4 本章小结
- python 一切皆对象,以及如何实现一切皆对象
- python 一等公民的特性
- python 常见数据类型概述