Python的类和对象(4)

1、反射

动态的给类和对象添加属性,获取属性,删除属性,修改属性【反射】。 --4个内置函数

1)设置属性:setattr( 对象/类,属性名,属性值)

2)获取属性:getattr(对象/类,属性名)

3)判断是否存在属性:hasattr(对象/类,属性名)

  • 结果是布尔值 - 有这个属性-True 没有-False
  • 使用场景:获取这个属性(动态)的值,先判断下是否类中存在这个属性 - 存在,直接获取;不存在的,设置属性,再去获取属性值
    4)删除属性: delattr(对象/类,属性名)

print(Car.dict) # 查看到所有的属性

python 复制代码
# 定义类 -- 车类
class Car:
    # 定义类属性
    wheel = "有车轮"
    engine = "有引擎"

    # 初始化函数--特殊的实例方法
    def __init__(self, cl="黑色", lg="奔驰"):  # 定义函数的参数
        print("正在生成一辆车....")
        # 定义实例属性:
        self.color = cl
        self.logo = lg

# # 1)设置属性:setattr( 对象/类,属性名,属性值)
# # 给类设置一个属性,name
# setattr(Car, "name" , "听说")
# # 查看类属性
# print(Car.__dict__)
#
# # 属性名不确定 -- 可能由用户输入、某些函数返回的 -- 属性名非固定-- 设置变量传入
# attr_name = input("输入属性名:")
# attr_value = input("输入属性值:")
# setattr(Car, attr_name, attr_value)
# print(Car.__dict__)
#
# # 2)获取属性:getattr(对象/类,属性名)
# print(getattr(Car, attr_name))
#
#
# # 3)判断是否存在属性:hasattr(对象/类,属性名) -- 结果:布尔值
# print(hasattr(Car, attr_name))
# # 使用场景
# attr_name = input("输入属性名:")
# attr_value = input("输入属性值:")
# if hasattr(Car,attr_name):
#     value = getattr(Car, attr_name)
# else:
#     setattr(Car,attr_name, attr_value)
#     value = getattr(Car, attr_name)
# print(value)

# # 4)删除属性: delattr(对象/类,属性名)
# print(hasattr(Car, attr_name))  # 删除前,有这个属性-True
# delattr(Car, attr_name)  # 删除类的属性
# print(hasattr(Car, attr_name))  # 删除后,没有这个属性-False
# print(Car.__dict__)
相关推荐
奔跑吧邓邓子14 小时前
CentOS 7性能飞升秘籍:实战系统优化与调优
linux·运维·centos·实战·系统优化·性能调优
_OP_CHEN14 小时前
从零开始的Qt开发指南:(五)Qt 常用控件之 QWidget(上):解锁 Qt 界面开发的核心基石
开发语言·c++·qt·前端开发·qwidget·gui开发·qt常用控件
@一辈子爱你14 小时前
归来九十余日:在时代的夹缝中,与你共筑一道光
python
wjs202414 小时前
SQLite 视图
开发语言
qinyia14 小时前
WisdomSSH如何高效检查服务器状态并生成运维报告
linux·运维·服务器·数据库·人工智能·后端·ssh
q***448114 小时前
java进阶--多线程学习
java·开发语言·学习
艾斯比的日常14 小时前
Neo4j 完全指南:从核心特性到 Java 实战(附企业级应用场景)
java·开发语言·neo4j
HsuHeinrich14 小时前
利用面积图探索历史温度的变化趋势
python·数据可视化
后端小张14 小时前
【JAVA 进阶】深入探秘Netty之Reactor模型:从理论到实战
java·开发语言·网络·spring boot·spring·reactor·netty
柠石榴14 小时前
go-1 模型
开发语言·后端·golang