栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python之getattr()函数的使用

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python之getattr()函数的使用

  • 1、getattr()介绍
  • 2、如果对象obj是类对象
  • 3、如果对象obj是模块对象
  • 4、如果查看对象obj的属性?
  • 5、总结

之所以使用到getattr()函数,因为我有一个需求,希望通过字符串指定使用某一个函数或者类。

1、getattr()介绍

先把官方文档的介绍抄过来:

getattr(object, name[, default])
返回对象命名属性的值。name 必须是字符串。如果该字符串是对象的属性之一,则返回该属性的值。例如, getattr(x, ‘foobar’) 等同于 x.foobar。如果指定的属性不存在,且提供了 default 值,则返回它,否则触发 AttributeError。

也就是如果对象obj有一个属性为func,则可以通过以下方式获取到该属性:

# 假设func是一个函数
attr=getattr(obj,"func","not found")
attr() # 执行该函数

等同于obj.func(),如果obj不存在,则attr=“not found”

2、如果对象obj是类对象

如果obj是类,我们可以通过该函数获取类的属性或者方法

通过下面的代码,我们可以获取到类的属性和方法:

# 定义一个类
class A:
    pv=3
    def __init__(self):
        pass
    def pf(self):
        print("pf")
    
    def tf(self):
        print("tf")
CA=A()	# 实例化

# 获取到CA类的pf函数
res=getattr(CA,'pf')
res()	# 执行函数
> output: pf

# 获取到CA类的变量属性pv
res=getattr(CA,"pv")
print(res) # 打印变量
> output:3
3、如果对象obj是模块对象

实际上可能更有用的是模块对象,我在一个模块中定义了很多个不同功能的类,通过字符串去获取不同的类。
先看看我们自定义一个模块结构:

utils
--__init__.py
--A.py
--B.py
--C.py
--D.py

__init__.py文件内容如下:

# 将这四个类暴露出去
from A import Add
from B import Sub
from C import Div
from D import Mul

也即是在utils这个模块中,有四个类,这四个类就是utils的属性,可以通过字符串来获取某个类
现在来根据字符串获取类对象:

# 获取到加类
import utlis
clas=getattr(utlis,'Add')	# 获取到Add这个类
op=clas()	# 实例化Add这个类

其他三个类同理

4、如果查看对象obj的属性?

使用dir()函数,如果你想知道类A有哪些属性,直接dir(A);如果你想知道模块对象有哪些属性,直接dir(utils);

官方文档有详细介绍以及例子:dir([object])

你可以看到通过dir()函数列举出来的属性,也是字符串,而getattr()中也需要传入属性的字符串形式

5、总结

无论是类对象还是模块对象,或者是其他什么对象,都可以通过dir([obj])查看他们的属性,然后通过getattr(object, name[, default])来获取object中名为name的属性,如果没有名为name的属性,则返回的是default,如果没有定义default则触发AttributeError异常。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001889.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号