zoukankan      html  css  js  c++  java
  • 一、python中的一切皆对象

    1、函数和类是对象,是Python中的一级公民

    (1)将函数和类赋值给一个变量

    将函数或类赋值给一个变量,就可以把该变量当成函数或类来使用

     1 def ask(name):
     2     print(name)
     3 class Person:
     4     def __init__(self):
     5         print("hello bobby")
     6 print("-----函数赋值给变量-------")
     7 my_func = ask
     8 # 变量当成函数使用
     9 my_func("bobby")
    10 print("---------类赋值给变量-----")
    11 my_class = Person
    12 # 变量当成类使用
    13 # 类实例化即会调用初始化函数
    14 my_class()

    (2)可以将对象(函数和类)添加到集合对象中

    def ask(name="bobby"):
        print(name)
    class Person:
        def __init__(self):
            print("hello bobby")
    print("-----函数和类可以添加到集合对象中去---")
    obj_list = []
    obj_list.append(ask)
    obj_list.append(Person)
    for item in obj_list:
        #打印函数和类中的东西,并且打印它们返回的东西
        print(item())
    '''
    输出结果
    bobby
    None---ask()函数没有返回值,故函数返回None
    hello bobby
    <__main__.Person object at 0x0219F8D0>-----类的返回(实际是init函数的返回),Person()实例化后返回一个对象(函数返回对象)
    '''

    (3)补充实例:函数可以返回None,可以返回一个对象,也可以返回一个函数(装饰器实现原理)

    def ask(name="bobby"):
        print(name)
    print("-----函数可以返回一个函数---")
    def decorator_func():
        print("我是一个函数")
        return ask
    my_ask = decorator_func()
    my_ask("Tom")
    '''
    输出结果
    我是一个函数
    Tom
    '''

    (4)函数和类可以作为参数传递给函数

    def ask(name="bobby"):
        print("传递一个函数")
    class Person:
        def __init__(self):
            print("传递一个类")
    print("---函数和类可以作为参数传递给函数---")
    def chuandi(content):
        content()
    # 传递函数
    chuandi(ask)
    # 传递类
    chuandi(Person)
    '''
    输出结果
    传递一个函数
    传递一个类
    '''

    (5)函数和类可以当作函数的返回值

    def ask(name="bobby"):
        print(name)
    class Person:
        def __init__(self):
            print("返回一个类")
    print("-----函数可以返回一个函数和类---")
    def decorator_func():
        print("我是一个函数")
        return ask
    my_ask = decorator_func()
    my_ask("返回一个函数")
    def decorator_func1():
        print("我是一个函数")
        return Person
    my_person = decorator_func1()
    my_person()
    '''
    输出结果
    我是一个函数
    返回一个函数
    我是一个函数
    返回一个类
    '''

    2、type、object和class的关系

    (1)type->class->obj

    类(class)是由type类生成的一个对象,平时所熟悉的对象obj是由类(class)对象创建的一个对象

    type两种用法:一,生成一个类;二,返回一个对象的类型

    (1.1)返回对象的类型

    1是一个int类的对象,类本身也是一个对象,由type(int)知,int是type类的对象,因此生成过程是type->int->1

    abc是str类的对象,类本身也是一个对象,由type(str)知,str是type类的对象,因此生成过程是type->str->abc

    自己创建的类也符合该逻辑,type生成类对象(内置的类或自定义的类),类对象产生实例

    (2)object是所有类都要继承的最顶层的一个基础类

    __base__查看类的基类

    (3)type也是一个类,同时type也是一个对象

    type的基类也是object

    object是所有类的基类,类同时也是对象,由type(object)知object是由type生成的

     

    object之上,没有基类

    (4)type、class、object关系图

    (4.1)内部类以及自定义类默认继承object,object是所有类的一个基类,type也继承它

    (4.2)object是type的实例,list等所有的内置类和自定义类都是由type创建的,type创建了所有对象(函数和类等)。如,list是一个类,它也是一个对象的原因在于,它是由type创建的,所以类也是对象(设计原因:类加载到内存后不能修改,而对象则能随时修改,比较方便)

    (4.3)object是type的实例,type继承了object,type也是type自身的实例,其他都是type的实例,故一切皆对象

    object是所有类的基类,所有的类最终往上追溯都继承它,object继承为空

    type既是一个类又是一个对象,所有的类往上追溯都是由type创建的,包括它自己

  • 相关阅读:
    操作串口通信类(IO.Ports)SerialPort
    TreeView的数据源绑定—采用sqlite作为数据源,实现对treeview控件进行增删改查
    (Easy)打开指定的文件
    TreeView的数据源绑定—采用XML作为数据源,实现对treeview进行增删改查,之后回写XML文档
    linux sort,uniq,cut,wc命令详解
    轻快的VIM(六):恢复
    Python 常用模块大全(整理)
    定位oracle实例的当前跟踪文件名及路径
    查看session io
    查看pga使用
  • 原文地址:https://www.cnblogs.com/slfh/p/10701149.html
Copyright © 2011-2022 走看看