setattr\getattr\delattr\hasattr的应用场景

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

猜你喜欢

转载自blog.csdn.net/eettttttt/article/details/131447697