首页 > 其他分享 >懒加载

懒加载

时间:2024-10-20 10:48:24浏览次数:1  
标签:__ name self getattr wrapped def 加载

懒加载

当调用某个属性或方法时,相关的资源(如对象实例等)不会立即加载,而是在需要的时候才进行加载,这种策略可以显著减少内存消耗。

django-admin来举例

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),   
]

相关知识点

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __getattr__(self, item):
       return "__getattr__"

obj = Person("xx", "123")
print(obj.email)  #当获取不到email的时候,会自动调用__getattr__方法

底层代码

def new_method_proxy(func):
    def inner(self, *args):
        if (_wrapped := self._wrapped) is empty:
            self._setup()
            _wrapped = self._wrapped
        # 通过getattr去获取相应的内容
        return func(_wrapped, *args)

    return inner


class LazyObject:
     _wrapped = None
        
     __getattr__ = new_method_proxy(getattr)
    

class DefaultAdminSite(LazyObject):
    def _setup(self):
        AdminSiteClass = import_string(apps.get_app_config("admin").default_site)
        # 需要的时候才进行加载
        self._wrapped = AdminSiteClass()

    def __repr__(self):
        return repr(self._wrapped)


site = DefaultAdminSite()

当我们自己要使用的时候

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def do_something(self):
        return "do_something"
    
    
class DefaultAdminSite(LazyObject):
    def _setup(self):
        self._wrapped = Person("xx", 123)

# obj相当于一个代理
obj = DefaultAdminSite() 
# 这里才会真正的去实例化对象,然后调用do_something方法
print(obj.do_something())   

标签:__,name,self,getattr,wrapped,def,加载
From: https://www.cnblogs.com/pythonav/p/18487009

相关文章

  • so加载流程分析
    源码我的安卓版本:Pie9.0.0_r查看android源码的网站AndroidXRefAOSPXRefso的加载有两种方式,一种是在Java层加载,另一种是在Native层加载。Java层在Java层加载so的方式,这里有两种方式在源码的System.java类里System.load(“/data/data/app包名/lib/libnative-lib.so......
  • 类加载器和反射
    第十章——类加载器和反射1、类的加载类的加载当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。加载就是指将class文件读入内存,并为之创建一个Class对象。任何类被使用时系统都会建立一个Class对象。连接验证......
  • ArkWeb页面拦截与自定义响应 - 控制加载过程
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。简介在Web应用开发中,有时我们需要对......
  • ArkWeb页面预加载与缓存 - 提升用户体验
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。简介在Web应用开发中,页面加载速度和......
  • 使用Web组件加载页面
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • ArcGIS无插件加载(无偏移)在线天地图高清影像与街道地图指南
    在地理信息系统(GIS)的应用中,加载高清影像与街道地图对于地图制图、影像查阅、空间数据分析等工作至关重要。天地图作为官方出品的地图服务,以其标准的数据、较快的影像更新速度等特点受到广泛欢迎。以下是如何在ArcGIS中无插件加载(无偏移)天地图高清影像与街道地图的具体步骤。......
  • transformers 推理 Qwen2.5 等大模型技术细节详解(一)transformers 初始化和对象加载(
    上周收到一位网友的私信,希望老牛同学写一篇有关使用transformers框架推理大模型的技术细节的文章。老牛同学刚开始以为这类的文章网上应该会有很多,于是想着百度几篇质量稍高一点的回复这位网友。结果,老牛同学搜索后发现,类似文章确实不少,但是总觉得不太满意,要么细节深度不够,要么......
  • 双亲委派机制以及类加载过程就是这样啊
    类加载过程:简洁来说就是将我们的已经完成编译的class字节码文件通过类加载器到我们JVM的内存运行时数据区成为我们可以在程序中可以使用的class对象,而类加载器就是通过双亲委派机制来实现的,这个也是反射的底层实现的原因具体流程: 加载链接 初始化加载:就是通过类加......
  • ArkWeb页面加载与浏览记录导航 - 基础操作
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。简介在ArkWeb框架中,页面加载和浏览记......
  • ROS2安装turtlebot4机器人,运行ign gazebo仿真加载机器人模型(用于评测catorgrapher算法
    前言本人最近做了一个任务,需要评测catorgrapher算法的精度,这个过程中需要使用到ros2仿真过程中机器人的真实轨迹和估计轨迹,在/odom和/sim_ground_true_pose话题中提取到机器人的真实轨迹,同时改变catorgraper的源码,在启动catorgraper算法后产生tum格式轨迹文件,最后使用evo进行......