简单瞅瞅Python vars()内置函数的实现
作者:王尼玛 发布时间:2021-03-29 20:41:05
标签:Python,vars()
0.偶然间看到一个奇怪的现象
>>> x = 1
>>> a = var()
>>> a['x']
1
这是啥操作??用help(vars)之后,我才知道......
>>> help(vars)
Help on built-in function vars in module builtins:
vars(...)
vars([object]) -> dictionary
Without arguments, equivalent to locals().
With an argument, equivalent to object.__dict__.
如果,没传入参数就将相当于locals(),嗨,我还以为什么语法糖呢......
不知道locals()的老铁们,可以先自己试一试,之后会写
1.vars()走起
vars() 函数返回参数对象object的属性和属性值的字典对象
实际上调用了对象内部定义的__dict__属性
可以试试:
>>> vars(1)
TypeError: vars() argument must have __dict__ attribute
由于1这个对象没有__dict__ 属性,所以报错
当然,如果参数为空则相当于调用locals()函数
我们做个试验:
class xx:
def __init__(self):
self.__dict__ = {'':'我是变量__dict__'}
接下来调用此类:
>>> a = xx()
>>> vars(a)
{'': '我是变量__dict__'}
没错吧,返回的是该对象的__dict__属性
简单说一下__dict__:
类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类的__dict__里
一些内置的数据类型是没有__dict__属性的(可以尝试下 vars('我没有__dict__属性')这个语句)
2.总结
vars()在没有传入参数的时候,相当于调用locals()
若传入自定义类的对象,则返回对象的__dict__属性,大多数自定义类会隐式创建__dict__属性
若传入一些内置的数据类型,则由于其没有__dict__属性,会报错:TypeError: vars() argument must have __dict__ attribute
来源:https://segmentfault.com/a/1190000020508021


猜你喜欢
- 本文主要内容:聚类算法的特点聚类算法样本间的属性(包括,有序属性、无序属性)度量标准聚类的常见算法,原型聚类(主要论述K均值聚类),层次聚类
- 前言go不要求类型显示地声明实现了哪个接口,只要实现了相关的方法即可,编译器就能检测到空接口类型可以接收任意类型的数据:type eface
- 今天在启动mysql时出现以下问题:[root@www ~]# mysql -u root -pEnter password: ERROR
- Worksheet 对象的 rows 属性和 columns 属性得到的是一 Generator 对象,不能用中括号取索引。可先用列表推导式
- 背景:调试服务最好的方式就是直接上机实践。对在公司的员工来说,在同一套服务上协同开发比在单独的环境上开发,应该会更有感觉。有问题可以一起发现
- ERRNO: 256 TEXT: SQLSTATE[HY000]: General error: 1436 Thread stac
- prop与$emit的用法1.vue组件Prop传递数据 组件实例的作用域是孤立的,这意味着不能在子组件的模板内直接引父组件的数据
- 在网上查了一下,在网上收集了Java与JavaScript中使用的两个例子,试验过,分享下。1、Java:package org.bearf
- 使用场景:按文件名字正序,批量执行某文件夹下的所有sql文件,并输出日志适合人群:实施工程师一、使用篇1、准备bat文件:1.1、ExecS
- 原文网址:gradio.app/sharing-you…1.分享演示share=True通过在方法中设置,可以轻松公开
- Python中的中文是个很头痛的问题,Python2和Python3都会出现,而且py2中出现的概率要大些。 有一道面试题: Py
- 目录解决MySQL主从数据库没有同步的两种方法一、不同步情况二、解决方案1.先进入主库,进行锁表,防止数据写入2.进行数据备份3.查看mas
- 当下基本所有的目标检测类的任务都会选择基于深度学习的方式,诸如:YOLO、SSD、RCNN等等,这一领域不乏有很多出色的模型,而且还在持续地
- 说明:本次代码是在Linux下执行的,windows也可以用,把添加用户密码的命令改成windows的就ok了用Python新建用户并产生随
- 如下所示://动态删除select中的所有options: function delAllOptions(){&nb
- 函数嵌套,这个名字有点纠结,也许不太好理解。一个比较常见的函数嵌套特例:递归函数,即函数自己嵌套自己。 一直以为在PHP中不能有太多的函数嵌
- 本文实例为大家分享了python绘制直方图的具体代码,供大家参考,具体内容如下用两列数据绘制直方图#coding=gbkimport xlw
- 一、Pytest简介Pytest is a mature full-featured Python testing tool that he
- 判断服务器是否安装了某种asp组件,比较常用的代码如下:代码如下:<% '功能:检查是否存在系统组件或组件是否安装成功
- 创建一个SpringBoot项目其他不赘叙了,引入MyBaties、MySql依赖创建mysql表CREATE TABLE sp_users