面向对象--反射

--反射

可以用过字符串的形式来操作(增删改查)一个对象的属性

有几种方法

  getattr()获取

  hasattr()判断

  setattr()赋值

  delattr()删除

 

复制代码
class Person(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age

p = Person("alex",22)
if hasattr(p,"name2"):      #hasattr()判断对象P中是否存在name2的属性
    print("存在name2")
else:
    print('不存在name2')

print(getattr(p,"age"))
setattr(p,"sex","male")
print(p.sex)
复制代码

 

应用场景:

在django的框架中的cbv的视图中的dispatch()方法,就是用反射来判断http请求的类型

复制代码
    def dispatch(self, request, *args, **kwargs):
        # Try to dispatch to the right method; if a method doesn't exist,
        # defer to the error handler. Also defer to the error handler if the
        # request method isn't on the approved list.
        if request.method.lower() in self.http_method_names:
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        return handler(request, *args, **kwargs)
复制代码

 

posted @   powfu  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示