# 第二章: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 常见数据类型概述
上次更新: 8/26/2022, 2:06:10 PM