- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python中getattr函数和hasattr函数作用详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
hasattr(object, name) 。
作用:判断对象object是否包含名为name的特性(hasattr是通过调用getattr(ojbect, name)是否抛出异常来实现的).
示例:
1
2
3
4
|
>>>
hasattr
(
list
,
'append'
)
True
>>>
hasattr
(
list
,
'add'
)
False
getattr
(
object
,name,default):
|
作用:返回object的名称为name的属性的属性值,如果属性name存在,则直接返回其属性值;如果属性name不存在,则触发AttribetError异常或当可选参数default定义时返回default值.
这个方法最主要的作用是实现反射机制。也就是说可以通过字符串获取方法实例。这样,你就可以把一个类可能要调用的方法放在配置文件里,在需要的时候动态加载.
下面我们使用小例子来说明它们的用法:
1
2
3
4
5
6
7
8
|
import
func_file
#自定义python模块
cs
=
input
(
'请输入要访问的URL:'
)
if
cs
=
=
'loggin'
:
func_file.loggin()
if
cs
=
=
'home'
:
func_file.home()
if
cs
=
=
'':
pass
#以下省略
|
当我定义一个自定义模块,去调用其中的方法的时候,使用if去判断时,如果模块内用很多方法,会大大影响开发的效率,代码冗余差,显然这是不可取的。下面我们使用hasattr()函数来实现我们的需求:
示例如下:
1
2
3
4
5
6
7
8
9
10
11
|
import func_file
#自定义python模块,需事先存在
def run():
while
True:
cs=input(
'请输入要访问的URL:'
)
#hasattr利用字符串的形式去对象(模块)中操作(寻找)成员
if
hasattr(func_file,cs):
#判断用户输入的URL是否在func_file模块中
func=getattr(func_file,cs)
#有则将func_file模块下的cs函数赋值
func()
#等同于执行func_file模块下的cs函数
else
:
print(
'404'
)
#定义错误页面
run()
|
我们导入一个自定义模块后,gatattr可以根据输入的内容动态加载,利用hasattr()函数来判断用户输入的是否存在,不存在则调用自定义方法.
是不是感觉和我们打开网址URL很类似啊! 。
上一个示例有一个问题,在实际情况中,我们的功能函数可能存放在很多模块中,每一个都需要单独导入,那我们可不可以利用getattr()函数去动态加载模块呢?当然可以啦 。
请看示例:
1
2
3
4
5
6
7
8
9
10
11
12
|
def
run():
while
True
:
cs
=
input
(
'请输入:'
)
v,k
=
cs.split(
'/'
)
#获得输入的模块和模块的方法
obj
=
__import__
(
'lib.'
+
v,fromlist
=
True
)
#调用lib目录下的模块fromlist=True按路径连接的方式导入
if
hasattr
(obj,k):
f
=
getattr
(obj,k)
f()
else
:
print
(
'404'
)
if
__name__
=
=
'__main__'
:
run()
|
是不是感到getattr很强大啊。其实,getattr()就是实现python反射的一块积木,结合其它方法如setattr(),dir() 等,我们可以还可以做出很多有趣的事情.
最后此篇关于Python中getattr函数和hasattr函数作用详解的文章就讲到这里了,如果你想了解更多关于Python中getattr函数和hasattr函数作用详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!