深入学习Django源码基础3 - python提供的对象默认方法

Python 小甲鱼教程 课后练习43 第一题,要求将输入参数的元素个数显示出来,那就是要用到*argv关键字参数了 自己的答案 class C: def __init__(self,*argv): if not argv: print ('no input') else: print ('There are %d parameters,and they are '%len(argv),end='') f 阅读详情

详细内容看这里A Guide to Python's Magic Methods

这里也有1篇中文的翻译部分https://pycoders-weekly-chinese.readthedocs.org/en/latest/issue6/a-guide-to-pythons-magic-methods.html

把python object提供的默认重载方法做了分类


1:构造和析构

__new__(cls, [...) 创造类

__init__(self, [...)初始化

__del__(self)删除类

演示代码

from os.path import join

class FileObject:
    '''Wrapper for file objects to make sure the file gets closed on deletion.'''

    def __init__(self, filepath='~', filename='sample.txt'):
        # open a file filename in filepath in read and write mode
        self.file = open(join(filepath, filename), 'r+')

    def __del__(self):
        self.file.close()
        del self.file

2:自定义类的操作符比较运算

也就是 == >= 此类

__cmp__(self, other)比较

__eq__(self, other)==

__ne__(self, other)!=

__lt__(self, other)<

__gt__(self, other)>

__le__(self, other)<=

__ge__(self, other)>=

演示代码

class Word(str):
    '''Class for words, defining comparison based on word length.'''

    def __new__(cls, word):
        # Note that we have to use __new__. This is because str is an immutable
        # type, so we have to initialize it early (at creation)
        if ' ' in word:
            print "Value contains spaces. Truncating to first space."
            word = word[:word.index(' ')] # Word is now all chars before first space
        return str.__new__(cls, word)

    def __gt__(self, other):
        return len(self) > len(other)
    def __lt__(self, other):
        return len(self) < len(other)
    def __ge__(self, other):
        return len(self) >= len(other)
    def __le__(self, other):
        return len(self) <= len(other)

3:数值运算类

这里不列举


4:描述类

常见

__str__(self)

__repr__(self)

__unicode__(self)


5:属性操作

__getattr__(self, name)

__setattr__(self, name, value)

__delattr__


6:自定义序列操作

__len__(self)长度

__getitem__(self, key)

__setitem__(self, key, value)

__delitem__(self, key)

__iter__(self)迭代器

__reversed__(self)反向

__contains__(self, item)

__missing__(self, key)子类继承时候忽略

演示代码

class FunctionalList:
    '''A class wrapping a list with some extra functional magic, like head,
    tail, init, last, drop, and take.'''

    def __init__(self, values=None):
        if values is None:
            self.values = []
        else:
            self.values = values

    def __len__(self):
        return len(self.values)

    def __getitem__(self, key):
        # if key is of invalid type or value, the list values will raise the error
        return self.values[key]

    def __setitem__(self, key, value):
        self.values[key] = value

    def __delitem__(self, key):
        del self.values[key]

    def __iter__(self):
        return iter(self.values)

    def __reversed__(self):
        return FunctionalList(reversed(self.values))

    def append(self, value):
        self.values.append(value)
    def head(self):
        # get the first element
        return self.values[0]
    def tail(self):
        # get all elements after the first
        return self.values[1:]
    def init(self):
        # get elements up to the last
        return self.values[:-1]
    def last(self):
        # get last element
        return self.values[-1]
    def drop(self, n):
        # get all elements except first n
        return self.values[n:]
    def take(self, n):
        # get first n elements
        return self.values[:n]

7:反射

用来检查类型

__instancecheck__(self, instance)

__subclasscheck__(self, subclass)


8:函数化

__call__(self, [args...])


9:上下文管理

__enter__(self)

__exit__(self, exception_type, exception_value, traceback)


10:抽象类

http://docs.python.org/2/library/abc.html


11:绑定的描述符

__get__(self, instance, owner)

__set__(self, instance, value)

__delete__(self, instance)

演示代码

class Meter(object):
    '''Descriptor for a meter.'''

    def __init__(self, value=0.0):
        self.value = float(value)
    def __get__(self, instance, owner):
        return self.value
    def __set__(self, instance, value):
        self.value = float(value)

class Foot(object):
    '''Descriptor for a foot.'''

    def __get__(self, instance, owner):
        return instance.meter * 3.2808
    def __set__(self, instance, value):
        instance.meter = float(value) / 3.2808

class Distance(object):
    '''Class to represent distance holding two descriptors for feet and
    meters.'''
    meter = Meter()
    foot = Foot()

12:拷贝

__copy__(self)

__deepcopy__(self, memodict={})深拷贝


13:存储与提取

__getinitargs__(self)

__getnewargs__(self)

__getstate__(self)

__setstate__(self, state)

__reduce__(self)

__reduce_ex__(self)

import time

class Slate:
    '''Class to store a string and a changelog, and forget its value when
    pickled.'''

    def __init__(self, value):
        self.value = value
        self.last_change = time.asctime()
        self.history = {}

    def change(self, new_value):
        # Change the value. Commit last value to history
        self.history[self.last_change] = self.value
        self.value = new_value
        self.last_change = time.asctime()

    def print_changes(self):
        print 'Changelog for Slate object:'
        for k, v in self.history.items():
            print '%s\t %s' % (k, v)

    def __getstate__(self):
        # Deliberately do not return self.value or self.last_change.
        # We want to have a "blank slate" when we unpickle.
        return self.history

    def __setstate__(self, state):
        # Make self.history = state and last_change and value undefined
        self.history = state
        self.value, self.last_change = None, None

Django 4.2 对象存储实战:S3 兼容配置与安全迁移指南 对象存储是现代 Web 应用处理文件上传的核心基础设施,其本质是将二进制数据管理从应用进程解耦,交由高可用、可扩展的专用服务承载。原理上依赖 S3 兼容协议(如 REST API v4 签名)、预签名 URL 权限控制和元数据/内容分离架构,技术价值体现在显著降低服务器 IO 与 CPU 压力、消除磁盘容量瓶颈、提升 CDN 缓存命中率并实现按量付费。典型应用场景包括用户头像上传、合同附件管理、课程视频分发等 Django 中高频的 FileField/ImageField 使用场景。本文聚焦 Django 阅读详情

相关推荐

一步到位Python Django部署,浅谈Python Django框架

数据入库是指将采集好的数据存储到数据库中以便后续处理和分析。作为一名PC端爬虫工程师,掌握数据入库技能是必不可少的。在进行数据采集的同时,将数据实时地存储到数据库中,可以让数据得到更好地管理和利用,提高效率和效益。数据库的创建和配置:选择一个合适的数据库,根据实际需要创建数据库表和配置数据库连接等参数。数据库连接:建立数据库与Python的连接。有关Python连接数据库的方法有很多种,比如通过Python自带的SQLite数据库模块、通过MySQL Connector等第三方库进行连接。数据准备和清洗。

ch950401的博客 1243

python里class中gt 和 it 方法_Python类内置方法

内置方法说明__init__(self,...)初始化对象,在创建新对象时调用__del__(self)释放对象,在对象被删除之前调用__new__(cls,*args,**kwd)实例的生成操作__str__(self)在使用print语句时被调用__getitem__(self,key)获取序列的索引key对应的值,等价于seq[key]__len__(self)在调用内联函数len()时被调...

weixin_26712065的博客 2196

Python Web项目代码保护实战:Pyarmor集成Django/Flask防源码泄露

在Python Web开发中,代码保护是保障知识产权和商业安全的核心需求。Python作为解释型语言,其源码以明文形式存在,在私有化部署或SaaS服务场景下面临泄露风险。代码混淆等基础手段防护能力有限,因此需要更底层的运行时保护技术。其原理是通过代码转换、加密和运行时环境(RASP)等多重机制,将Python字节码进行加密,并在执行时动态解密,从而在不影响程序正常运行的前提下,大幅提升逆向工程的门槛和成本。这项技术的核心价值在于,它能无缝集成到现有开发流程,为承载核心业务逻辑的模块提供商业级防护,有效防范未

weixin_30512089的博客 458

Python——魔法方法:算术运算2

class C: def __init__(self, *args): if not args: print('并没有传入参数') else: print('传入了%d个参数,分别是:' % len(args), end='') for each in args: print(each, end='') cla...

Sam's blog 213

Python编程基础与实践入门指南

Python的基本语法结构是编写Python程序的基础。我们将从变量定义、基础数据类型、条件判断、循环控制等基本概念入手,逐一讲解Python独特的语法风格和实用技巧。在此过程中,我们将特别关注Python的缩进规则,这是Python语法中最容易让初学者困惑的部分。# 变量定义和简单的数据类型# 条件语句else:# 循环控制print(i)通过本章的学习,读者将掌握Python编程的基础知识和核心语法,为后续章节中涉及的高级特性打下坚实的基础。

weixin_34392511的博客 934

Python Django小说网站源码全解析:模型、部署与优化

Python Django作为全栈开发框架,以MVT架构和内置ORM著称,是构建内容型网站的高效选择。在小说阅读站点场景中,借助Django的模型字段设计、外键关系与查询优化,可实现分类、章节、书架、阅读记录等核心功能,满足从学习到毕业设计的实际需求。文章深入解析一套可运行的Django小说网站源码,涵盖数据模型、核心模块实现、本地部署、生产环境配置与常见踩坑,帮助开发者快速掌握Django内容站点的完整开发链路,并为二次开发提供可扩展的基底。

weixin_33812433的博客 326

python内置方法之完整版

转至http://pycoders-weekly-chinese.readthedocs.io/en/latest/issue6/a-guide-to-pythons-magic-methods.html,此处做红色笔记标记。转载前请与原作者联系。   本打算续写两年半前未完成的一篇博文python内置方法之前六种,但发现网上已有更好的完整讲解,因此转载至此。   1. 简介   本指南归纳于我的几个月的博客,主题是 魔法方法 。   什么是魔法方法呢?它们在面向对象的Python的处处皆是。它们是一些

LETFLY'S LAB 1万+

Python Django小说网站项目源码实战解析:从搭建到部署

Web开发中,Python与Django的组合凭借其“自带电池”的特性,成为构建内容型网站的高效选择。Django的ORM、内置用户认证和后台管理功能,能快速支撑起用户体系、内容管理、搜索分页、阅读记录等核心业务模块,这正是小说网站这类完整Web应用的典型需求。本文以一套小说网站项目源码为例,从环境搭建、项目初始化、数据模型设计,到部署上线与常见坑位排查,系统讲解Django项目的实际运用。同时结合Python生态,探讨如何利用现有框架进行二次开发与性能优化,帮助开发者快速上手并理解Web应用的工程实践,适

weixin_34293911的博客 367

Python学习笔记(二十二)——小甲鱼第四十三讲

0、不会   1、对于a+b,如果a对象的__add__方法没有实现或者不支持相应操作,Python会自动调用b的__radd__方法   2、使用super()这个函数   3、为基类起别名,在类定义的时候,使用别名代替你要继承的基类   4、在类中直接定义的(没有self)变量就是静态属性   5、静态方法只需要在普通方法前边加上@staticmethod修饰符即可...

qq_33613232的博客 388

避开模板匹配的坑:OpenCVSharp中边缘梯度算法的优化实践

本文深入探讨了OpenCVSharp中边缘梯度算法在模板匹配中的优化实践,解决了传统方法在尺度变化、角度旋转和光照差异下的局限性。通过Sobel算子提取边缘梯度特征,结合轮廓检测和多尺度匹配策略,显著提升了匹配的鲁棒性和准确性。文章还分享了并行计算、内存访问优化等实战技巧,适用于工业检测和自动化识别场景。

http9protocoller的博客 196

短信验证码接收平台完整搭建教程(超详细版,附完整源码)

在网站注册、用户登录、找回密码等功能中,验证码(特别是短信验证码)已成为验证用户身份的常见方式。本教程将详细介绍如何从零搭建一个短信验证码接收平台,用于保存、展示并管理来自短信网关或中间转发程序提交的验证码数据。✅ 教程适合有基本 Python/HTML 基础的开发者🚫 禁止用于任何违法用途,仅供学习参考✅ 支持通过 POST 接口接收短信验证码✅ 支持通过网页实时查看验证码历史记录✅ 验证码信息保存在 SQLite 数据库✅ 支持时间戳排序、查询最新验证码。

weixin_52548902的博客 4543

Django 3.2 开发web项目

Django 3.2 开发web项目开发环境Django安装Django文档Django创建Django启动Django目录介绍Django创建自己的应用CODE IS ALL YOU NEED无数据库有数据库(含html页面的展示)源码链接吐槽一下 开发环境 系统:window 10 Python版本:Python 3.8 Django版本: 3.2.8 IDE:PyCharm 20 Django安装 one code is ok! pip install django 神奇的p

xiaoquan0001的博客 6458

Delta机器人:运动学正反解分析

Delta机器人:运动学正反解分析 一、Delta机构简介 Delta机构是并联机构中的一种典型机构,起原始结构如图1所示。Delta机构由R.Clavel 博士在 1985年发明,是现在并联机器人中使用最多的一种,具备了并联机构所特有的优点,负载能力强、效率高、末端执行器精度高、运动惯性小,可以高速稳定运动等。因此在机器人领域获得了越来越广泛的应用。以实现高速、精准、高效的运动。           &n

花洛兮灬 3万+

Django 源码分析 LazySetting 对象

一、Django 中通过 LazySetting 对象来获取项目的配置,LazySetting 对象有什么特性?为什么使用这个对象? LazySetting 顾名思义,就是延迟获取配置内容。比如,我们定义了一个对象A,并对其添加了一些属性,对A初始化时,我们将 A 的属性的值设置为空,当我们要访问 A 其中的一个属性时,此时属性的值为空,我们才加载属性的值,并将空值设置为对应的值,返回属性值,...

Nick.Peng's Blogs 1563

工控安全政策系列导读:国际标准IEC 62443标准系列

IEC 62443由ANSI/ISA提出,被ISO/IEC采纳,所以该标准会以不同的名字出现,包括:ANSI/ISA-99,ISA-99,ISA 62443,ISO/IEC 62443,ISO 62443,IEC 62443。其中IEC 62443-2-1已等同采纳为国标,于2016年10月发布,标准编号为GB/T 33007。 IEC 62443是在国...

weixin_34132768的博客 2621

Vek385评估板(二):板子联网 & memtester安装(LPDDR5X测试)

继上一篇文章:Vek385评估板(一):EDF成功烧录启动及一些问题。 本章完成最主要的两个功能:开发板联网+内存 memtester。因为我是做测试行业的,所以这两个是最想试的。内存测试,除了FPGA测,也可以系统级测,本次在versal上实现这个功能,主要是可以应急。在没有安卓、X86的情况下,可以使用本方案测试。 下一篇会继续做一些其他功能。

千歌叹尽执夏的博客 221

基于Python+Django的自主在线学习系统源码+lw+部署文档+讲解等

当前自主在线学习面临诸多痛点:学习资源分散在不同平台,用户需跨平台查找,难以系统整合;缺乏个性化学习规划,用户易陷入 “盲目刷题”“随意选课” 的困境,学习效率低;学习进度缺乏有效跟踪,知识点掌握情况模糊,无法及时查漏补缺;互动交流渠道不足,遇到问题难以及时获得解答,易打击学习积极性。​ 基于 Python+Django 的自主在线学习系统可针对性解决这些问题。系统以 Django 为后端框架,整合资源管理、个性化规划、进度跟踪、互动答疑等核心功能:平台汇聚多领域学习资源(视频课程、题库、文档资料),支持按

874

Microsemi Libero系列教程(四)——PLL的使用

文章目录PLL是什么Libero中PLL的使用官方文档 系列教程:Microsemi Libero系列教程 PLL是什么 PLL(Phase Locked Loop): 为锁相回路或锁相环,用来统一整合时钟信号,使高频器件正常工作,如内存的存取资料等。PLL用于振荡器中的反馈技术。 许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步。一般的晶振由于工艺与成本原因,做不到很高的频率...

whik1194的博客 7210

Django框架学习——3—(URL指定默认的参数、re_path函数、模板介绍、模板变量、常用标签)

1、URL指定默认的参数 article/views.py from django.shortcuts import render from django.http import HttpResponse book = [ "python", "java", "PHP", ] def article(request): return HttpResponse("前台文章 % s" % book[0]) def page(request, page_num=1):

weixin_42118531的博客 1826

内容审核与文本安全技术综述:检测、过滤与对齐

检测质量高度依赖数据。毒性/仇恨/冒犯语言检测领域形成了一批经典数据集,但它们的标签体系差异很大:例如 OLID(OffensEval)强调“是否冒犯—冒犯类型—目标对象”三层结构;HateXplain 在“hate/offensive/normal”三分类之外,还提供目标群体与人类标注的 rationale span;RealToxicityPrompts 则不做离散标签,而是用毒性分数来研究“模型续写时的毒性退化”。ACL 汇编。

nmdbbzcl的博客 1370

在 ABAP Cloud 里优雅地调用 HTTP 服务:新一代 HTTP Client 全面实践与落地指南

摘要: 随着ABAP Cloud时代的到来,HTTP通信在SAP系统集成中的角色日益重要。传统CL_HTTP_CLIENT存在维护成本高、边界模糊等问题,而新一代ABAP HTTP Client采用Destination驱动的调用方式,通过CL_HTTP_DESTINATION_PROVIDER支持四种创建方式(URL、通信安排、BTP Destination服务、SM59连接)。该模型将连接配置与业务逻辑分离,使URL、认证等参数可集中管理。典型调用流程包括:基于Destination创建Client,设

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 250

python django restful框架_Python之Django rest_Framework框架认证源码分析

#!/usr/bin/env python#-*- coding:utf-8 -*-from rest_framework.views importAPIViewfrom rest_framework.response importResponseclassTestView(APIView):def get(self, request, *args, **kwargs):#self.dispatc...

weixin_39856709的博客 129

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

双节锂电主动均衡设计实战:MP2642GR-Z与PIC18F87J10协同精控

电池串联失配是储能系统可靠性核心挑战,其本质源于制造公差、温差与自放电差异引发的电压漂移。传统被动均衡仅能泄能,无法实现电荷重分配,导致SOC估算偏差加剧、低压误保护等工程风险。主动均衡通过双向能量转移机制(如Buck-Boost架构)提升能效与热管理能力,显著改善长期循环一致性。在双节18650等紧凑型应用中,需兼顾高精度电压采样、闭环电流控制、多层协同散热及抗扰PCB布局。本文以MP2642GR-Z芯片与PIC18F87J10 MCU深度协同为例,解析从原理建模、环路设计、布板约束到量产验证的全链路工程

weixin_34161032的博客 373

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

力扣双周赛 177 Q2「合并相近字符」的栈消除写法与 Go 实现剖析

本篇围绕力扣双周赛 177 第 2 题(`mergeCharacters`,题名 merge close characters)展开,以 [leetcode/biweekly/177/b/README.md](https://link.gitcode.com/i/9956f0f5c9239409c6a6a09390a55676) 中的邻项消除解法为骨架,结合本仓库的 Go 参考实现 [b.go](

gitblog_01134的博客 197

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

基于python+django的英语学习平台系统网站(源码+lw+部署文档+讲解等)

在英语学习需求多样化与个性化学习理念普及的背景下,传统学习模式存在明显局限:线下教学资源分散在教材、APP 和线下课程中,学习者整合 “词汇、语法、听力” 等内容需耗费大量时间;标准化学习路径同质化,统一进度无法适配 “备考雅思”“职场应用” 等差异化需求; 缺乏精准反馈,做题错误仅显示答案,未分析 “时态混淆”“介词搭配” 等深层原因; 口语练习依赖人工批改,反馈滞后且成本高,发音问题难以纠正。 基于 Python+Django 的英语学习平台价值显著。系统整合 “词汇库、真题库、影视素材” 构建结构化资

609

Django-admin组件

admin是django中提供的一套可视化工具:用于对ORM中定义的表进行增删改查。

m0_72839702的博客 3132
上一篇: 深入学习Django源码基础2 - python多态技巧-运行时判断函数
下一篇: 深入学习Django源码基础4 - python的动态延时加载技术(lazy)
watsy
博客等级 码龄19年 133粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值