美文网首页
第一章: Python中一切皆对象

第一章: Python中一切皆对象

作者: 莫辜负自己的一世韶光 | 来源:发表于2019-03-14 11:38 被阅读0次

    思维导图


    1. Python面向对象更加彻底,就是因为python里面一切都是对象,就连模块都是对象
    函数和类也是对象,属于python的一等公民.那么该怎么解释这个一等公民呢?满足如下四个条件:

    1>可以赋值给一个变量
    2>可以当作参数传递给一函数
    3>可以作为一个函数的返回值
    4>可以作为元素添加到容器中

    # encoding:utf-8
    __author__ = 'Fioman'
    __time__ = '2019/3/14 8:54'
    """
    在Python中一切都是对象,函数和类也是对象,它们是python的一等公民.
    1>可以赋值给一个变量
    2>可以作为参数传递给一个函数
    3>可以作为一个函数的返回值
    4>可以添加到一个容器中
    """
    
    
    def ask(name='Fioman'):
        print(name)
    
    
    class Person(object):
        def __init__(self):
            print('Class')
    
    
    obj_list = []
    obj_list.append(ask)
    obj_list.append(Person)
    for item in obj_list:
        print(item())
    # 打印结果Fioman  None  Class  <__main__.Person object at 0x000001ABED8C34E0>
    # 分析. 调用ask的时候,因为ask没有返回值,所以item()的结果是None.而因为item()相当于是
    # 调用Person(),相当于是创建一个实例对象,返回值是一个Person的实例.
    
    # 作为参数传递给一个函数
    def print_type(item):
        print(type(item))
    print('****函数作为参数*****')
    for item in obj_list:
        print_type(item)
    # 打印结果
    # <class 'function'>
    # <class 'type'>
    
    print('函数作为返回值------------->')
    def create_person(P,ask):
        Person2 = P
        my_ask = ask
        return Person2,my_ask
    
    print(create_person(Person,ask)[0](),create_person(Person,ask)[1]())
    # 打印结果Class 和 Fioman 相当于是调用Person() 和 ask(). 注意返回的是一个元组
    
    print('*' * 10)
    my_func = ask  # 函数可以赋值给一个变量
    my_func()
    
    print('*' * 10)
    my_class = Person
    my_class()  # 类也可以赋值给一个变量来调用
    

    2.type,object,class之间的关系

    注意几点
    1.type是python的一切的源头,python中所有的对象都是由type创建.
    2.而之所以可以做到一切皆对象,是因为type本身也是它自己的对象.也就是说type(type) 的返回值还是'type'
    3.Python中所有的类,如果没有显示的指定父类,都默认继承自object类.
    4.object类是最顶层的类,但是它也是由type创建,并且type(object)的时候也是type,但是object的父类是()空
    5.python中一切都是对象,所以比较灵活,因为可以在程序运行的过程中更改对象的属性

    # encoding:utf-8
    __author__ = 'Fioman'
    __time__ = '2019/3/14 9:23'
    '''
    type 和 object 以及class之间的关系
    '''
    class Student():
        pass
    def f():
        pass
    a = 1
    s = 'abc'
    lst = [1,2,3]
    d = dict(x=1)
    stu = Student()
    print(type(a),type(s),type(lst))
    # <class 'int'> <class 'str'> <class 'list'>
    print(type(stu),type(Student))
    # <class '__main__.Student'> <class 'type'>
    # 所以stu实例对象是由Student类生成的,而类对象Student是由type生成的.
    # 总结type -> int -> 1
    # 总结type -> class -> obj
    
    # 什么是object,object是最顶层基类,所有类如果没有显示的写明继承的父类
    # 就会默认继承自object
    print(Student.__bases__) # (<class 'object'>,)
    print(type.__bases__) # (<class 'object'>,)
    print(object.__bases__) # ()
    print(type(object)) # <class 'type'>
    print(type(type)) # <class 'type'>
    

    3.Python创建的内置类型

    相关文章

      网友评论

          本文标题:第一章: Python中一切皆对象

          本文链接:https://www.haomeiwen.com/subject/xlpfmqtx.html