1. setattr描述
setattr() 函数对应函数 getattr(),用于设置属性值,该属性不一定是存在的。
语法:setattr(object, name, value)
object – 对象。
name – 字符串,对象属性。
value – 属性值。
2. getattr描述
getattr() 函数用于返回一个对象属性值。
getattr 语法:getattr(object, name[, default])
object – 对象。
name – 字符串,对象属性。
default – 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。
3. delattr描述
delattr 函数用于删除属性。delattr(x, ‘foobar’) 相等于 del x.foobar。
delattr 语法:delattr(object, name)
object – 对象。
name – 必须是对象的属性。
4. hasattr描述
hasattr() 函数用于判断对象是否包含对应的属性。
hasattr 语法:hasattr(object, name)
object – 对象。
name – 字符串,属性名。
5. 应用场景(主要讲setattr)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
'''setattr含义:为一个类设置属性或值-setattr(class, attribute, value),即使这个属性不存在
应用场景:
场景1、初始化未必全需要写在def __init__(self)函数里面。如果有很多的话写起来会比较长。可以通过下面代码init_fun拆分。
场景2、可以动态添加属性,增加类或实例的添加属性的灵活性。
场景3、当批量初始化同样的属性时,可以减少代码量。
场景4、可以当作错误码使用。
上述场景在下面代码里面也会涉及到。
'''
class A(object):
def __init__(self):
# 场景1
self.init_fun()
# 场景3
def add_attribute(self, attribute, room_size, des, price):
value = {"room_size": room_size,
"description": des,
"price": price}
setattr(self, attribute, value)
# 场景3(将add_attribute里面的数据改成web的错误码集合,就能应用到场景4)
def init_fun(self):
self.add_attribute("roomA", "100", "high", "10w")
self.add_attribute("roomB", "130", "low", "15w")
self.add_attribute("roomC", "140", "low", "100w")
self.add_attribute("roomD", "150", "low", "10w")
test = A()
print(test.roomA)
# 场景2
setattr(test, "roomE", {"room_size": "100",
"description": "middle",
"price": "90W"})
print(test.roomE)
# getattr的用法
print(getattr(test, "roomB"))
# delattr的用法
print(delattr(test, "roomB"))
# hasattr的用法
print(hasattr(test, "roomB"))
print(hasattr(test, "roomA"))
输出如下:
E:\pythonPrj\common\venv\Scripts\python.exe E:/pythonPrj/common/setattr_getattr.py
{'room_size': '100', 'description': 'high', 'price': '10w'}
{'room_size': '100', 'description': 'middle', 'price': '90W'}
{'room_size': '130', 'description': 'low', 'price': '15w'}
None
False
True
Process finished with exit code 0