一、python中的一切皆对象
1、函数和类是对象,是Python中的一级公民
(1)将函数和类赋值给一个变量
将函数或类赋值给一个变量,就可以把该变量当成函数或类来使用
- def ask(name):
- print(name)
- class Person:
- def __init__(self):
- print("hello bobby")
- print("-----函数赋值给变量-------")
- my_func = ask
- # 变量当成函数使用
- my_func("bobby")
- print("---------类赋值给变量-----")
- my_class = Person
- # 变量当成类使用
- # 类实例化即会调用初始化函数
- 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创建的,包括它自己
一、python中的一切皆对象的更多相关文章
- python中的一切皆对象
python中一切皆对象是这个语言灵活的根本.函数和类也是对象,属于python的一等公民.包括代码包和模块也都是对象.python的面向对象更加彻底. 可以赋值给一个变量可以添加到集合对象中可以作为 ...
- 第二章python中的一切皆对象
1.函数和类也是对象,属于python的一等公民 赋值给一个变量 可以添加到集合对象之中 可以作为参数传递给函数 可以当作函数的返回值 def ask(name="ask_wzh" ...
- Python中的变量引用对象需注意的几点
Python中的变量引用对象需注意的几点 分类:Python (55) (0) 普通引用: Python中,变量的作用仅仅是一个标识,只有赋值后才被创建,它可以引用任何类型的对象,而且在引用之前必须 ...
- Python中的可迭代对象
Python中的可迭代对象有:列表.元组.字典.字符串:常结合for循环使用: 判断一个对象是不是可迭代对象: from collections import Iterable isinstanc ...
- python中的类,对象,方法,属性等介绍
注:这篇文章写得很好.加底纹的是我自己的理解 python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性( ...
- python 变量作用域 v.__sizeof__() python 深复制 一切皆对象 尽量减少内存消耗
python 深入理解 赋值.引用.拷贝.作用域 - 江召伟 - 博客园 https://www.cnblogs.com/jiangzhaowei/p/5740913.html a=[1,2,5]b= ...
- 初识python中的类与对象
这篇博客的路线是由深入浅,所以尽管图画的花花绿绿的很好看,但是请先关注我的文字,因为初接触类的小伙伴直接看类的实现可能会觉得难度大,只要耐着性子看下去,就会有一种“拨开迷雾看未来”的感觉了. 一.py ...
- 实习小记-python中不可哈希对象设置为可哈希对象
在这篇之前,我又专门翻译过官方python3.3的可哈希对象文档,大家可以先参考一下: 实习小记-python中可哈希对象是个啥?what is hashable object in python? ...
- python中的is, ==与对象的相等判断
在java中,对于两个对象啊a,b,若a==b表示,a和b不仅值相等,而且指向同一内存位置,若仅仅比较值相等,应该用equals.而在python中对应上述两者的是‘is’ 和‘==’. (1) py ...
随机推荐
- error: `cout' was not declared in this scope
原因:C++ 1998 要求cout and endl被调用使用'std::cout'和'std::endl'格式,或using namespace std; 修改后:#include<iost ...
- pytest自动化2:测试用例setup和teardown
前言: pytest支持函数和类两种用例方式,针对每种情况都有不同的代码 pytest用例运行级别 模块级(setup_module/teardown_module)开始于模块始末,全局的 函数级(s ...
- [RESTful] 项目设计实践
有以下的项目需求 用户登录.注册 文章发表.编辑.管理.列表 一.资源路径 /users./articles 二.HTTP动词 GET.POST.DELETE.PUT 三.过滤信息 文章的分页筛选 四 ...
- [RESTful] DHC Client
安装Chrome的DHC插件, 进入DHC Client谷歌插件网页. 安装到Chrome浏览器: 点击Chrome设置 点击扩展程序 把刚刚下载的文件解压缩 把 .crx 后缀的文件直接拖入Chro ...
- PyQt5 -pycharm 环境搭建
1.安装PyQt5 在CMD窗口执行命令: pip3 install PyQt5 安装 pyqt_toools pip3 install PyQt5-tools 2.配置PyCharm 1)打开PyC ...
- 【原创】Arduino入门基础知识总结
一.概述 Arduino是源自意大利的一个开放源代码的硬件项目平台,该平台包括一块具备简单I/O功能的电路板以及一套程序开发环境软件. Arduino可以用来开发交互产品,比如它可以读取大量的开 ...
- Python 内编写类的各种技巧和方法
Python 内编写类的各种技巧和方法 简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象 ...
- 正则表达式andJS内存空间详细图解
http://www.runoob.com/js/js-regexp.html https://blog.csdn.net/pingfan592/article/details/55189622
- 实现在WebView中返回上一级
代码 import React, {Component} from 'react'; import {Platform, View, WebView, BackHandler,Dimensions,S ...
- QWaiteCondition思考4
引用 http://blog.csdn.net/flyoxs/article/details/54617342 简单用法 QWaitCondition 用于多线程的同步,一个线程调用QWaitCond ...