(python)getattr等用法
2024-10-09 21:54:27
getattr() 函数用于返回一个对象属性值;
语法
getattr(object, name[, default])
参数
object -- 对象。
name -- 字符串,对象属性。
default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError
返回值:对象的属性
使用:
class A:
def __init__(self):
self.name = 'chen_ke_cheng'
def method(self):
print('method print') # 实例化
Instance = A()
#%%
#如果Instance 对象中有属性name则打印self.name的值,否则打印'not find'
print(getattr(Instance, 'name', 'not find'))
>> chen_ke_cheng
print(getattr(Instance, 'age', 'not find'))
>> not find
#%%
#如果子函数method,否则打印其地址,否则打印default,优先匹配_init_里的属性,如果添加self.method='ckc', 则这句话将打印输出'ckc'
print(getattr(Instance, 'method', 'default'))
>><bound method A.method of <__main__.A object at 0x000001E39B6B1160>>
#如果有子函数method,实例化后运行函数并打印None否则打印default
print(getattr(Instance, 'method', 'default')())
>>method print
None
express1 for var in list (if express2)
语法
在 for 语句后面跟上一个 if 判断语句,用于过滤掉那些不满足条件的结果项。
返回值:一般为一个list类型
用法1:express1 for var in list
def_model = 'LstmModel'
def find_class_by_name(name, modules):
#module 在modules中迭代, 且module 用于判断有无name属性,并赋值
modules = [getattr(module, name, None) for module in modules]
return next(a for a in modules if a) #find_class_by_name返回的值为类LstmModel的地址,需要对此类进行实例化,得到类变量model,list中为两个文件
model = find_class_by_name(def_model,[frame_level_models,video_level_models])()
#则对model类的子函数进行实例化,则运行子函数。
print(model.create_model())
>>LstmModel
None #%%
frame_level_models.py class FrameLevelLogisticModel:
def create_model(self):
print('FrameLevelLogisticModel') class LstmModel:
def create_model(self):
print('LstmModel')
#%%
video_level_models.py class FrameLevelLogisticModel:
def create_model(self):
print('FrameLevelLogisticModel') class ModaModel:
def create_model(self):
print('ModaModel')
用法2:express1 for var in list if express2
L = [1, 2, 3, 4, 5, 6]
L = [x for x in L if x % 2 != 0]
>>L = [1, 3, 5]
next() 返回迭代器的下一个项目
语法
next(iterator[, default])
参数
iterator -- 可迭代对象
default -- 可选,用于设置在没有下一个元素时返回该默认值,如果不设置,又没有下一个元素则会触发 StopIteration 异常。
用法
# 首先获得Iterator对象
#注意加括号是产生一个迭代器
#如 g = (x * x for x in range(10)) g = iter([1,2,3,4,5,6....])就是产生一个迭代器
it = iter([1, 2, 3, 4, 5])
# 循环:
while True:
try:
# 获得下一个值:
x = next(it)
print(x)
except StopIteration:
# 遇到StopIteration就退出循环
break >>1
>>2
>>3
....
最新文章
- 《Ansible权威指南》笔记(1)——安装,ssh密钥登陆,命令
- adb工具获取appPackage和appActivity
- github在liunx上的搭建
- 用CSS制作伪标签云
- tinyXML的用法,用于解析gpx文件
- linux下使用 Tomcat 的几个坑
- 【BZOJ】【1520】【POI2006】Szk-Schools
- T-SQL 使用链接库向mysql导数据遇到的奇葩事件一
- C#_delegate - 用委托实现事件,Display和Log类都使用Clock对象
- C++ 开源库
- 链表插入排序(insertion-sort-list)
- VS2003与Win7的兼容性问题
- 使用gulp实现文件压缩及浏览器热加载
- 延迟确认和Nagle算法
- mysql用户管理及授权
- CSU 1592 石子合并 (经典题)【区间DP】
- JDK 8 中Lambda表达式的使用
- 分组背包模板题 hdu1712
- 20181111 Quartz(慕课网)
- 1、JDK自带注解
热门文章
- 操作系统(AIX)双因素身份认证解决方案-中科恒伦CKEY DAS
- Powershell编程基础-003-脚本的绝对路径及所在的目录
- kubeadm单集群部署k8s1.15.1&;calico网络
- Shiro框架--将Shrio的session改成HTTPSession数据
- 用 Java 做个“你画手机猜”的小游戏
- get 跟post的区别
- 7种jvm垃圾回收器,这次全部搞懂
- Python-进程-进程池-原理
- Python-集合 字典-set dict fronzenset
- USB虚拟串口 使用基于stm32的RT-Thread