zoukankan      html  css  js  c++  java
  • python基础-面向对象编程之反射

    面向对象编程之反射

    反射

    定义:通过字符串对对象的属性和方法进行操作。

    反射有4个方法,都是python内置的,分别是:

    hasattr(obj,name:str)

    通过“字符串”判断对象的属性或方法是否存在返回bool值,True表示有,False表示没有。

    注意:查询方法时,只需写方法名,不要加小括号!!!

    class User:
        def __init__(self, name, age, gender):
            self.name = name
            self.age = age
            self.gender = gender
    
        def show_userinfo(self):
            print(f"姓名:{self.name},年龄:{self.age},性别:{self.gender}")
    
    
    # 创建user对象
    user = User("haha", 37, "男")
    # 查询属性name 是否存在
    res = hasattr(user, "name")
    print(res)  # 输出结果:True
    # 查询方法show_userinfo 是否存在。注意:不要加括号!!
    res_func = hasattr(user, "show_userinfo")
    print(res_func)  # 输出结果:True
    res_func = hasattr(user, "show_userinfo()")
    print(res_func)  # 输出结果:False
    
    

    getattr(obj,name:str,[default])

    通过“字符串”获取对象的属性或方法

    注意

    1.如果只传入前两个参数,当属性或方法不存在,会报错

    2.为了防止当属性或方法不存在,该方法报错,设置第三个参数为找不到时的默认值

    3.获取方法时,不要带小括号!!!

    # 创建user对象
    user = User("haha", 37, "男")
    # 获取属性值
    res = getattr(user, "name")
    print(res)  # 输出结果:haha
    # 获取不存在的属性
    res_false = getattr(user, "uid")
    print(res_false)  # 报错
    # 设置默认值
    res_true = getattr(user, "uid", "不存在")
    print(res_true)  # 不报错,输出结果:不存在
    
    # 获取方法
    res_func = getattr(user, "show_userinfo")
    print(res_func)  # 输出结果:方法内存地址
    # 获取带括号的方法
    func_false = getattr(user, "show_userinfo()")
    print(func_false)  # 报错
    # 设置默认值
    func_true = getattr(user, "show_userinfo()", "不存在")
    print(func_true)    # 不报错,输出结果:不存在
    

    setattr(obj,name:str,value)

    通过“字符串”设置对象的属性或方法

    # 创建user对象
    user = User("haha", 37, "男")
    # 新增一个属性hobby,属性值是read
    setattr(user, "hobby", "read")
    print(user.hobby)		# 输出:read
    # 修改属性age的值
    setattr(user, "age", 27)
    print(user.age)			# 输出:27
    

    delattr(obj,name:str)

    通过“字符串”删除对象的属性或方法

    注意:

    删除不存在的属性或方法,会报错

    删除方法时,不要带小括号!!

    # 创建user对象
    user = User("haha", 37, "男")
    # 删除属性gender
    delattr(user, "gender")
    print(user.gender)  # 删除后,输出结果:报错'User' object has no attribute 'gender'
    # 删除一个对象没有的属性
    delattr(user, "hobby") # 不存在的属性,删除会报错
    
  • 相关阅读:
    Python统计字符串中出现次数最多的人名
    c++中delete和析构函数之间的区别
    pycharm常用快捷键详解,让你编程 事半功倍。
    C语言入门学习(二)常量
    Linux关于文件的权限笔记
    python实现将IP地址转换为数字
    django中django.conf.urls.url函数
    Linux下安装Python3和django并配置mysql作为django默认服务器
    django中models field详解
    python3.5中import sqlite3报错:ImportError: No module named _sqlite3
  • 原文地址:https://www.cnblogs.com/xiaodan1040/p/11958274.html
Copyright © 2011-2022 走看看