首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python面试题之Python反射详解

0x00 前言 反射,可以理解为利用字符串的形式去对象中操作成员属性和方法 反射的这点特性让我联想到了exec函数,也是把利用字符串的形式去让Python解释器去执行命令 Python Version...: 3.5+ 解释Python的反射,先提一个简单的需求,现在我有一个简易的网站,由两个文件组成,一个是具体执行操作的commons.py文件,一个是入口文件index.py,现在我需要在入口文件中设置...那现在我的网站内容变多了,在commons.py中有100个页面操作,那么相对应的我在index.py中也要使用if else 对这100个页面函数进行手动指定。 有了Python?...源码的解释还说,该函数的实现其实就是调用了getattr()函数,只不过它捕获了异常而已。所以通过这个函数,我们可以先去判断对象中有没有这个方法,有则使用getattr()来获取该方法。...,还是用之前的方式调用可以吗?

49930

python 面向对象基础 获取对象信息

使用dir() 如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list,比如,获得一个str对象的所有属性和方法: >>> dir('ABC') ['__add__'..., '__class__',..., '__subclasshook__', 'capitalize', 'casefold',..., 'zfill'] 类似__xxx__的属性和方法在Python中都是有特殊用途的...在Python中,如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法,所以,下面的代码是等价的: >>> len('ABC') 3...return self.x * self.x ... >>> obj = MyObject() 紧接着,可以测试该对象的属性: >>> hasattr(obj, 'x') # 有属性'x'吗?...True >>> obj.x 9 >>> hasattr(obj, 'y') # 有属性'y'吗?

76010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python学习:内建属性、内建函数的教程

    内建属性python3中查看类的内建属性和方法:python 代码解读复制代码 >>> class Person: ......内建函数启动python解释器,输入dir(__builtins__),,可以看到很多python解释器启动后默认加载的属性和函数,这些函数称之为内建函数(Build-in Function),这些函数因为在编程时使用较多...这些函数数量众多,不宜记忆,开发时不是都用到的,待用到时再使用 help(function) 查看如何使用,或结合百度查询即可,在这里介绍些常用的内建函数。...例如:range(0, 5) 等价于 range(0, 5, 1)python2中range返回列表,python3中range返回一个迭代器。...返回值的类型和参数sequence的类型相同(python3中返回迭代器)。

    5800

    Python内置函数使用说明

    类和函数是可调用的,包含__call__()方法的类的对象也是可调用的 compile() 用于把Python代码编译成可被exec()或eval()函数执行的代码对象 chr(x) 返回Unicode...编码为x的字符 dir(obj) 返回指定对象或模块obj的成员列表 eval(s[, globals[, locals]]) 计算并返回字符串s中表达式的值 exec(x) 执行代码或代码对象x filter...(x) 把整数或字符串x转换为浮点数并返回 hasattr(obj, name) 测试对象obj是否具有名为name的成员 hash(x) 返回对象x的哈希值,如果x不可哈希则抛出异常 help(obj...(如果有多个类型的话需要放到元组中)的实例 len(obj) 返回对象obj包含的元素个数,适用于列表、元组、集合、字典、字符串以及range对象和其他可迭代对象 list([x])、set([x])、...func的参数分别来自于iterables指定的每个迭代对象, max(x)、 min(x) 返回可迭代对象x中的最大值、最小值,要求x中的所有元素之间可比较大小,允许指定排序规则和x为空时返回的默认值

    78340

    Python 中的字符串 — str

    如果你不太确定应该用什么,%s 永远起作用,它会把任何数据类型转换为字符串 其中,格式化整数和浮点数还可以指定是否补 0 和 指定小数的位数。...]: 四、字符串的方法 由于字符串在编程中经常用到,因此 Python 对字符串的操作有非常多的方法。...4.1 dir()查看 str 的所有方法 我们可以用内置模块( builtins.py) 的 dir() 来查看某个的类的所有方法,返回的是所有方法汇总的列表(list) 打印字符串中的所有方法 def...Python 中的魔术方法,在【Python 高级专栏】中有详细介绍,请查看 Python中的魔法属性 4.2 使用 help() 来查看方法、函数的文档 def iter_out(iter_obj,...输出结果: >>>使用help()查看文档 Help on function iter_out in module __main__: iter_out(iter_obj, row_num, left_just

    1.2K10

    Python Python中的内置函数总结

    Python中的内置函数总结 总结python的常用内置函数 常用函数1 函数名 参数 介绍 返回值 举例 abs Number 返回数字绝对值 正数字 abs(-10) all List 判断列表内容是否全是...true Bool all(['', '123']) help object 打印对象的用法 无 help(list) enumerate iterable 迭代时记录索引 无 for index, item...Str type(10) vars instance 返回实例化的字典信息 dict dir object 返回对象中所有可用方法和属性 List dir('asd') hasattr Obj, key...判断对象中是否有某个属性 Bool hasattr('1', 'upper') 常用函数3 函数名 参数 介绍 返回值 举例 setattr Obj,key,value 为实例化对象添加属性与值 无...setattr(instance, 'run', 'jo') gatattr obj, key 通过对象获取属性 任何类型 getattr(obj, key) any Iterable 判断内容是否有

    32910

    云原生网关 APISIX 的核心流程以源码分析的方式剖析其工作原理

    如果你的 C 函数接受 const char * 或者等价的 const unsigned char/int8_t/... * 这样的参数类型, 可以直接传递 Lua string 进去,而无需另外准备一个...Lua Table 需要注意的地方其一: table.new(narray, nhash) 这个函数,会预先分配好指定的数组和哈希的空间大小,而不是在插入元素时自增长,这也是它的两个参数 narray...和 nhash 的含义。...需要根据实际场景,来预设好 table.new 中数组和哈希空间的大小,这样才能在性能和内存占用上找到一个平衡点。...使用 lua-var-nginx-module Nginx C 模块和 FFI 获取变量,在没有开启 Nginx C 模块的情况下回退到 ngx.var 方式获取。

    4.2K22

    脚本更新----空间转录组信号流COMMOT与空间inferCNV(封装版)

    作者,Evil Genius针对visium、bin模式的Stereo-seq、HD等的脚本更新。对于单细胞而言,大家网上找点代码分析出个结果,已经很容易了,但是想分析的很好,还是很难的。...我自己看了看,盗版很多内容都是阉割后的,大家自己要有识别能力,改过来,还有参数的配置,我上课是示例,配的参数简单,别瞎套用,自己的项目要调整的。...dir.exists(str_interp("${output_dir}/infercnv_label"))) {dir.create(str_interp("${output_dir}/infercnv_label...Finished running for sample: ", sample_id))拿到热图拿到CNV矩阵至于进化树注释,之前写过了,大家可以参加文章流程升级----空间CNV分析流程升级接下来COMMOT脚本,python...backos.chdir(root_out)拿到空间通讯信号流生活很好,有你更好

    7210

    一文带你搞定自定义unittest中测试用例的名称

    在之前的文章中,面试题:unittest加载测试用例名称必须以test开头,是否可以定制化 一文中,讲解了如何去修改测试用例的名称,当时的做法呢,是直接在源码中修改,但是每次去源码中修改...= module for part in parts: try: parent, obj = obj, getattr(obj,..., suite.TestSuite): return obj if callable(obj): test = obj()...---- 这篇文章其实是之前文章的升级,但是由于,之前考虑的不足,导致了代码有一定的局限性,在本次修改后,可能暂时是满足了,但是如果还需要定制的时候,我们尽量不要直接改写类库的代码,而是在代码在外面进程封装改动后使用...---- 如果感觉文章对你有帮助,可以点亮在看。

    1.1K10

    python基本数据类型(二)-python

    python基本数据类型 序列类型的自带方法 1.列表的常用方法 2.元祖的常用方法 3.字符串的常用方法 1.列表常用的方法 L.append(obj) #在列表末尾添加新的对象 L.clear...() #清空列表 L.copy() #复制列表,不是同一个对象,内容相同,有返回值。...id不同(内存中的地址不同) L.count(obj) #统计某个元素在列表中出现的次数 L.extend(obj) #用obj扩展原来的列表 L.index(obj)...列表中的元素要类型相同(key=len) 内置函数: sorted()和reversed() >>> li = [1,2,3] >>> dir(li) #查看li列表的属性方法,带下划线的为魔法方法和私有方法...count(obj) #统计某个元素在元祖中出现的次数 index(obj) #从列表中找到某个值第一个匹配项的索引位置 注意:生命只有一个元素的元组时要加逗号 特点

    45810

    华为杯 研究生CTF初赛 - pwn adv_lua - lua沙盒逃逸

    ,可以地址泄露 move方法正常情况下会清空是src对象的size和buf,free掉dst的buf,将src和size和buf复制到dst上。...但是当dst==src的时候等价于只free了dst的buf,其它没有任何变化,这样就发生了UAF。...通过UAF控制某个obj的结构体就可以完成指针劫持和类型混淆之类的攻击手段 刚开始想的是能够造任意地址写那一套,然后用glibc八股打法来着,但是get和set前面都加了个很恶心的checker,会在写...又折腾了一通终于找到这个table了 表中有很多个方法,一开始打算全劫持了100%触发,但是变更源代码会影响初始堆布局,懒得堆风水那么多了,只劫持了其中一部分,然后调用copy方法 虽然有一定概率可以触发到...')了 EXP 大概1/3的概率打通: exp.lua -- /readflag barr = bytes.new(1) function get_int64(obj, off) res

    79830
    领券