Python教程

Python中一切皆对象

本文主要是介绍Python中一切皆对象,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

对象的三个特征

  • 身份

    身份可以理解成在内存中的地址,可以通过id()函数查看某一个对象的身份,因为对象是分配在内存中的。相当于指针指向对象

  • 类型

    int 、str等等

Python的一切皆对象

  • 首先,对象应该是某个类型的实例,也就是模板刻出来的模型,也就是说Python中所有对象都是“实例”都有相对应“类”
  • 其次,对象应该在内存中有一块区域用于存放它的地址
  • 最后,对象应该有具体的值

函数和类也是对象

  • 赋值给一个变量
  • 可以添加到集合对象当中
  • 可以作为参数传递给函数
  • 可以当函数的返回值

注:

  • 函数不加括号赋值给变量,叫引用,两者地址相同。加了括号(成了调用)赋值给变量,那是将调用结果给变量,此时两者的地址是不同的

  • Python的类,带括号是实例化,不带括号是赋值。带括号的type是定义的类,不带括号type类型是type

可调用对象

  • 可调用对象的定义
    调用运算符()后并执行,这就是可调用对象。如果想要判断对象是否可以调用,可以使用内置函数callable()函数。
  • 七种可调用对象
    1. 用户定义的函数
      使用def语句或者lambda表达式创建
    2. 内置函数
      使用 C 语言(CPython)实现的函数,如 len 或 time.strftime。
      3.内置方法
      使用 C 语言实现的方法,如 dict.get。
    3. 方法
      在类的定义体中定义的函数。

    4.  调用类时会运行类的 new 方法创建一个实例,然后运行 init 方法,初始 化实例,最后把实例返回给调用方。因为 Python 没有 new 运算符,所以调用类相当于调 用函数。(通 常,调用类会创建那个类的实例,不过覆盖 new 方法的话,也可能出 现其他行为。)
    5. 类的实例
      如果类定义了 call 方法,那么它的实例可以作为函数调用。对实例x来说,x(args)等价于x.__call __(args)
    6. 生成器函数
      使用 yield 关键字的函数或方法。调用生成器函数返回的是生成器对象。

type、object和class的关系

在这里插入图片描述

  • list、str、dict、tuple、type都继承了object,所以object是最顶层的基类
  • type是本身的对象(实例),object、list、str、dict、tuple都是type的对象,所以type创建了所有的对象
  • 综合下来,一切皆对象的同时,又继承了object类,这就是Python的灵活之处
  • 实例

    # Python中一切皆对象
    a=1
    b='abc'
    c=[]
    d=dict()
    e=(1,2,3)
    
    
    # 函数可以赋值给一个变量
    def ask(name='sixkery'):
        print(name)
    
    def sing(name='ge'):
        print(name)
    
    class Person():
        def __init__(self):
            print("sixkery1")
    
    def decorator_fubc():  # 装饰器的原理就来自这里的
        print('dec start')
        return ask
    
    if __name__=="__main__":
        my_func = ask  # 函数赋给变量
        my_func()  # 把函数当变量来使用
        si=sing()
        p=Person()
        de=decorator_fubc()
        de()
        de1=decorator_fubc
        print("类型:{},地址:{}".format(type(a),id(a)))
        print("类型:{},地址:{}".format(type(b), id(b)))
        print("类型:{},地址:{}".format(type(c), id(c)))
        print("类型:{},地址:{}".format(type(d), id(d)))
        print("类型:{},地址:{}".format(type(e), id(e)))
        print("my_func类型:{},地址:{}".format(type(my_func), id(my_func)))
        print("ask函数的类型:{},地址:{}".format(type(ask), id(ask)))
        print("p的类型:{},地址:{}".format(type(p), id(p)))
        print("Person类的类型:{},地址:{}".format(type(Person), id(Person)))
        print("类型:{},地址:{}".format(type(de), id(de)))
        print("类型:{},地址:{}".format(type(de1), id(de1)))
        print("类型:{},地址:{}".format(type(si), id(si)))
        print("int类型:{},地址:{}".format(type(int), id(int)))
        
        # 结果为:
        sixkery
        ge
        sixkery1
        dec start
        sixkery
        类型:<class 'int'>,地址:4366494000
        类型:<class 'str'>,地址:4367454448
        类型:<class 'list'>,地址:4374146304
        类型:<class 'dict'>,地址:4374199616
        类型:<class 'tuple'>,地址:4374064576
        my_func类型:<class 'function'>,地址:4367085776
        ask函数的类型:<class 'function'>,地址:4367085776
        p的类型:<class '__main__.Person'>,地址:4374216608
        Person类的类型:<class 'type'>,地址:4964107424
        类型:<class 'function'>,地址:4367085776
        类型:<class 'function'>,地址:4374194064
        类型:<class 'NoneType'>,地址:4372481136
        int类型:<class 'type'>,地址:4383786008
    
这篇关于Python中一切皆对象的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!