Python内置方法

图像增强算法:基于Retinex的图像增强算法 该算法对图像的亮度和颜色进行分离处理,然后通过调整它们的比例来提高图像的质量。滤波后的图像将保留颜色信息,并减少图像中的噪声。接下来,Retinex算法使用一个高通滤波器对原始图像进行滤波处理,以增强图像中的亮度信息。通过使用Retinex增强算法,我们可以有效地提高图像的质量,增强图像中的细节和颜色信息。最后,Retinex算法通过将颜色恢复和亮度调整后的图像进行比例调整,以获得最终的增强图像。Retinex算法是一种常用的图像增强算法,它通过对图像的亮度和颜色进行调整,以提高图像的视觉质量。 阅读详情

回顾记录Python的内置方法

1、__new__、__init__

__new__方法是真正的类构造方法,用于产生实例化对象(空属性)。重写__new__方法可以控制对象的产生过程。
__init__方法是初始化方法,负责对实例化对象进行属性值初始化,此方法必须返回None,__new__方法必须返回一个对象。重写__init__方法可以控制对象的初始化过程。

# 使用new来处理单例模式

class Student:
    __instance = None

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = object.__new__(cls)
        return cls.__instance

    def sleep(self):
        print('sleeping...')

stu1 = Student()
stu2 = Student()

print(id(stu1), id(stu2))  # 两者输出相同
print(stu1 is stu2)  # True

个人感觉,__new__一般很少用于普通的业务场景,更多的用于元类之中,因为可以更底层的处理对象的产生过程。而__init__的使用场景更多。

2、__str__、__repr__

两者的目的都是为了显式的显示对象的一些必要信息,方便查看和调试。__str__被print默认调用,__repr__被控制台输出时默认调用。即,使用__str__控制用户展示,使用__repr__控制调试展示。

# 默认所有类继承object类,object类应该有一个默认的str和repr方法,打印的是对象的来源以及对应的内存地址

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

stu = Student('zlw', 26)
print(stu)  # <__main__.Student object at 0x0000016ED4BABA90>
# 自定义str来控制print的显示内容,str函数必须return一个字符串对象
# 使用repr = str来偷懒控制台和print的显示一致

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

    def __str__(self):
        return f'{self.__class__}, {self.name}, {self.age}'
    
    __repr__ = __str__

stu = Student('zlw', 26)
print(stu)  # <class '__main__.Student'>, zlw, 26

3、__call__

__call__方法提供给对象可以被执行的能力,就像函数那样,而本质上,函数就是对象,函数就是一个拥有__call__方法的对象。拥有__call__方法的对象,使用callable可以得到True的结果,可以使用()执行,执行时,可以传入参数,也可以返回值。所以我们可以使用__call__方法来实现实例化对象作为装饰器:


# 检查一个函数的输入参数个数, 如果调用此函数时提供的参数个数不符合预定义,则无法调用。

# 单纯函数版本装饰器
def args_num_require(require_num):
    def outer(func):
        def inner(*args, **kw):
            if len(args) != require_num:
                print('函数参数个数不符合预定义,无法执行函数')
                return None

            return func(*args, **kw)
        return inner
    return outer

@args_num_require(2)
def show(*args):
    print('show函数成功执行!')

show(1)  # 函数参数个数不符合预定义,无法执行函数
show(1,2) # show函数成功执行!
show(1,2,3)  # 函数参数个数不符合预定义,无法执行函数

# 检查一个函数的输入参数个数,
# 如果调用此函数时提供的参数个数不符合预定义,则无法调用。

# 实例对象版本装饰器
class Checker:
    def __init__(self, require_num):
        self.require_num = require_num

    def __call__(self, func):
        self.func = func

        def inner(*args, **kw):
            if len(args) != self.require_num:
                print('函数参数个数不符合预定义,无法执行函数')
                return None

            return self.func(*args, **kw)
        return inner

@Checker(2)
def show(*args):
    print('show函数成功执行!')

show(1)  # 函数参数个数不符合预定义,无法执行函数
show(1,2) # show函数成功执行!
show(1,2,3)  # 函数参数个数不符合预定义,无法执行函数

4、__del__

__del__用于当对象的引用计数为0时自动调用。
__del__一般出现在两个地方:1、手工使用del减少对象引用计数至0,被垃圾回收处理时调用。2、程序结束时调用。
__del__一般用于需要声明在对象被删除前需要处理的资源回收操作

# 手工调用del 可以将对象引用计数减一,如果减到0,将会触发垃圾回收

class Student:

    def __del__(self):
        print('调用对象的del方法,此方法将会回收此对象内存地址')

stu = Student()  # 调用对象的__del__方法回收此对象内存地址

del stu

print('下面还有程序其他代码')
class Student:

    def __del__(self):
        print('调用对象的del方法,此方法将会回收此对象内存地址')

stu = Student()  # 程序直接结束,也会调用对象的__del__方法回收地址

5、__iter__、__next__

这2个方法用于将一个对象模拟成序列。内置类型如列表、元组都可以被迭代,文件对象也可以被迭代获取每一行内容。重写这两个方法就可以实现自定义的迭代对象。

# 定义一个指定范围的自然数类,并可以提供迭代

class Num:
    def __init__(self, max_num):
        self.max_num = max_num
        self.count = 0
        
    def __iter__(self):
        return self

    def __next__(self):
        if self.count < self.max_num:
            self.count += 1
            return self.count
        else:
            raise StopIteration('已经到达临界')
        
num = Num(10)
for i in num:
    print(i)  # 循环打印1---10

6、__getitem__、__setitem__、__delitem__

重写此系列方法可以模拟对象成列表或者是字典,即可以使用key-value的类型。

class StudentManager:
    li = []
    dic = {}

    def add(self, obj):
        self.li.append(obj)
        self.dic[obj.name] = obj

    def __getitem__(self, item):
        if isinstance(item, int):
            # 通过下标得到对象
            return self.li[item]
        elif isinstance(item, slice):
            # 通过切片得到一串对象
            start = item.start
            stop = item.stop
            return [student for student in self.li[start:stop]]
        elif isinstance(item, str):
            # 通过名字得到对象
            return self.dic.get(item, None)
        else:
            # 给定的key类型错误
            raise TypeError('你输入的key类型错误!')

class Student:
    manager = StudentManager()

    def __init__(self, name):
        self.name = name

        self.manager.add(self)

    def __str__(self):
        return f'学生: {self.name}'

    __repr__ = __str__


stu1 = Student('小明')
stu2 = Student('大白')
stu3 = Student('小红')
stu4 = Student('胖虎')

# 当做列表使用
print(Student.manager[0])  # 学生: 小明
print(Student.manager[-1])  # 学生: 胖虎
print(Student.manager[1:3])  # [学生: 大白, 学生: 小红]

# 当做字典使用
print(Student.manager['胖虎'])  # 学生: 胖虎

7、__getattr__、__setattr__、__delattr__

当使用obj.x = y的时候触发对象的setattr方法,当del obj.x的时候触发对象的delattr方法。
当尝试访问对象的一个不存在的属性时 obj.noexist 会触发getattr方法,getattr方法是属性查找中优先级最低的。
可以重写这3个方法来控制对象属性的访问、设置和删除。
**特别注意:如果定义了getattr,而没有任何代码(即只有pass),则所有不存在的属性值都是None而不会报错,可以使用super().__getattr__()方法来处理**

class Student:
    def __getattr__(self, item):
        print('访问一个不存在的属性时候触发')
        return '不存在'

    def __setattr__(self, key, value):
        print('设置一个属性值的时候触发')
        # self.key = value  # 这样会无限循环
        self.__dict__[key] = value

    def __delattr__(self, item):
        print('删除一个属性的时候触发')
        if self.__dict__.get(item, None):
            del self.__dict__[item]

stu = Student()
stu.name = 'zlw'  # 设置一个属性值的时候触发
print(stu.noexit)  # 访问一个不存在的属性时候触发 , 返回'不存在'
del stu.name  # 删除一个属性的时候触发

8、__getatrribute__

这是一个属性访问截断器,即,在你访问属性时,这个方法会把你的访问行为截断,并优先执行此方法中的代码,此方法应该是属性查找顺序中优先级最高的。
属性查找顺序:
实例的getattribute-->实例对象字典-->实例所在类字典-->实例所在类的父类(MRO顺序)字典-->实例所在类的getattr-->报错

class People:
    a = 200

class Student(People):
    a = 100

    def __init__(self, a):
        self.a = a

    def __getattr__(self, item):
        print('没有找到:', item)

    def __getattribute__(self, item):
        print('属性访问截断器')
        if item == 'a':
            return 1
        return super().__getattribute__(item)

stu = Student(1)
print(stu.a)  # 1

9、__enter__、__exit__

这两个方法的重写可以让我们对一个对象使用with方法来处理工作前的准备,以及工作之后的清扫行为。


class MySQL:
    def connect(self):
        print('启动数据库连接,申请系统资源')

    def execute(self):
        print('执行sql命令,操作数据')

    def finish(self):
        print('数据库连接关闭,清理系统资源')

    def __enter__(self):  # with的时候触发,并赋给as变量
        self.connect()
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):  # 离开with语句块时触发
        self.finish()

with MySQL() as mysql:
    mysql.execute()
    
# 结果:
# 启动数据库连接,申请系统资源
# 执行sql命令,操作数据
# 数据库连接关闭,清理系统资源

 转载自:http://www.cnblogs.com/zzzlw/p/9286828.html

利用autojs制作抢购支付宝消费劵的手机脚本 前期准备工作 1.打开支付宝,点击中间的抢消费券的广告 2.点击左上角,将抢购页面添加到首页 3.查看支付宝首页是否出现消费劵 . autojs代码 "auto"; functiontaskstart(){ sleep(1000); launchApp('支付宝'); toast("正在打开支付宝应用"); sleep(1000); varxf=textContains("消费").findOne().bounds(); ... 阅读详情

相关推荐

TortoiseGit提示No supported authentication methods available错误

一、问题 在使用TortoiseGit与远程仓库进行同步代码的时候提示如下错误,即:没有支持认证的方法可用。而GitBash却可以正常使用,不受影响。 通过调查,发现应该是TortoiseGit远程仓库的公匙无法和本地的密匙进行匹配认证造成的(主要是TortoiseGit缺少本地密匙)。由于TortoiseGit的默认网络SSH client是TortoiseGitPlink.exe,如下图所示。因此主要有两种方式来解决该问题: 不修改TortoiseGit的默认网络SSH client,此时需要为To

Jeffxu_lib的博客 2万+

Python 中类的内置方法(魔法函数)

Python 中类的内置方法(魔法函数) 凡是在类内部定义,以_ _ xx _ _ 结尾的方法,都是类的内置方法,也称之为魔法方法 注意:类的内置方法,会在某种条件满足下自动触发 常用内置方法: 1、__init__ 在调用类时自动触发,通过object类产生的空对象自动调用__init__(),重写__init__方法可以控制对象的初始化过程。 def __init__(self): print("此处是__init__方法的执行..") 2、__new__ 在__init__触发前自动触发,调

qq_50840738的博客 4237

当OTN网络遭遇LOS告警:5个运维老手才知道的故障定位技巧(含CA动作对照表)

本文深入解析OTN网络中LOS告警的实战定位技巧,涵盖光功率深度诊断、模块差异分析及核心的CA动作机制。通过逆向追踪告警流与对照速查表,帮助运维人员快速锁定故障段落,区分硬软故障,并掌握系统健康度评估方法,从而提升排障效率与网络稳定性。

weixin_29266007的博客 552

面向对象 几个内置方法

首先class类里的内置方法,比如:__call__,__str__这些都是在一定条件下自动运行的。 下面我们来介绍几个内置方法 1、__str__ #先讲讲他的作用,在print打印对象的时候会自动触发运行 #例子1: class Student: def __init__(self,name,age): self.name = name ...

weixin_33975951的博客 300

硬件笔记——HDMI接口

HDMI可以同时传输视频信号、音频信号和控制信号。其中高速信号有四组:从Data TX到Data RX有3组差分数据信号(TMDS_DATA0~2)和一组差分时钟信号(TMDS_CLOCK)。以及若干低速线。脚编号信号名称信号类型功能说明1热插拔检测连接状态检测。接收端通过此引脚向源端发送高电平信号,通知其已连接并可以开始读取EDID。2UTILITY车载用途悬空3TMDS数据通道2差分信号正极,用于传输视频像素、音频和数据包。4TMDS数据2屏蔽。

2501_94625908的博客 542

半导体设备隔振必看:如何用天棚阻尼PID控制实现VC-C级振动抑制(含SIMULINK模型)

本文深入探讨了在半导体精密制造中,如何运用天棚阻尼PID控制算法实现VC-C级振动抑制。通过构建高保真单自由度仿真模型,详细解析了从算法原理、SIMULINK实现到参数整定的全链路方案,并针对谐波扰动提供了陷波滤波器设计方法,为工程师提供了从仿真到实践的完整主动隔振技术指南。

pz89012345的博客 538

Python 类与内置方法

类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。类变量或者实例变量, 用于处理类及其实例对象的相关的数据。如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。定义在方法中的变量,只作用于当前实例的类。在类的声明中,属性是用变量来表示的。

Lzcsfg的博客 1661

World Creator地形导入UE

导出预设选择高度图(heigh map)格式选择PNG 16位,或者RAW 16位,需要反转y轴(与虚幻不同),命名格式会自动带一个× , 将×改成_ 或者删掉自己命名 (虚幻名称不支持x符号)导入虚幻 , 修改Z轴 , 就是用 地形最高 - 地形最低 , 然后除以512 , 再乘以100。把这个数字填入Z轴缩放 , 点击生成即可。

UE星空 2154

python类的常用内置方法

文章目录一、isinstance和issubclass二、__getattribute__三、__setitem__,__getitem__,__delitem__ 一、isinstance和issubclass isinstance(obj,cls) 判断某一个实例是否属于某一个类,若属于返回True,否则返回False isinstance(sub,super) 判断某一个子类是否属于...

u014761412的博客 518

Orin+ GMSL (Ser 9295+Des 9296)流程分析(1)

orin gmsl

乐于分享 2658

【PointNet++】使用Open3D对分割后的结果可视化

PointNet++中的局部分割网络预测后是没有可视化文件的,所以需要自己通过编写Open3D或者PCL点云算法去可视化,在本人经过查找翻阅修改后,实现了网络输出点云分割后结果的可视化。已实现推测单个点云,并可视化。

纵马踏花向自由 2453

Python类的内置方法

目录 1、new、init 2、str、repr 3、call 4、del 5、iter、next 6、getitem、setitem、delitem 7、getattr、setattr、delattr 8、getatrribute 9、enter、exit 10、get、set、delete、描述符(研究中,待补充) **(为了方便和美观,省略了各...

weixin_33772645的博客 280

微信H5网页支付JSAPI部分用户报错:system:access_denied 的解决方案

JSAPI 支付仅支持微信内置浏览器调用。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1686

Python 笔记 | 常用的内置类、内置方法

python常用的类、常用的方法

JUST FOR FUN, CALM DOWN 964

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Python内置方法干货总结

在如今AI和大数据加速发展的时代,代码质量与开发速度变得前所未有的重要。越来越多的企业在招聘Python开发时,特别看重应聘者对基础能力的掌握,比如内置方法的熟练运用。这不仅是技术实力的体现,更是对工程思维的考验。Python内置方法是开发者手中的“魔法棒”,从len()到zip(),它们简化了复杂任务,让代码更简洁、优雅。掌握这些方法,不仅提升开发效率,还让你更贴近Python的哲学——用最少代码实现最大价值。无论是数据分析、Web开发还是自动化脚本,这些内置方法都是你的得力助手。

朱雀随云记的博客 1322

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

python内置方法

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

Zjf的博客 225

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Python中常用的内置方法

python中常用的内置方法 1.运算方法 # >>> min(3,4) # 3 # >>> min(7,4) # 4 # >>> max(7,4) # 7 # >>> max(3,4) # 4 # >>> sum(range(1,101)) # 5050 # >>> s...

Leslie_qlh的博客 292

python列表的内置方法_python内置方法

目录内置对象方法汇总字符串Stringlist(可变序列)元组Tuple(不可变序列)4.字典和集合Set(无序不重复)内置对象方法汇总常用内置对象的方法String定义,切片,长度,替换,编列.....列表/元组定义,使用,循环遍历......字典定义,使用,循环遍历.......集合Set连接数据库!各种内置模块os,file,re,time,json.......字符串String定义: 一...

weixin_39757265的博客 100

Python:深入探索内置方法

Python是一种高级编程语言,以其简洁和强大而闻名。Python3作为其最新的主要版本,提供了许多内置方法,这些方法是提高编程效率和简化代码开发的强大工具。在这篇文章中,我们将详细介绍Python3的一些关键内置方法,并展示它们在实际编程中的应用。

十年运维开发经验的王义杰在此分享自己的知识和经验 887

python 内置方法_Python 内置方法

数学运算abs:求数值的绝对值deffunc(x,y,f):return f(x)+f(y)print(func(-1,9,abs))#输出结果:10divmod:地板除(返回两个数值的商和余数)print(divmod(5,2))#输出结果:(2, 1)max:返回可迭代对象中的元素的最大值或者所有参数的最大值print(max([2,3,4,5,6,7]))print(max([1,2],[2...

weixin_39527372的博客 160

python列表的内置方法_Python内置方法详解

1. 字符串内置方法详解为何要有字符串?相对于元组、列表等,对于唯一类型的定义,字符串具有最简单的形式。字符串往往以变量接收,变量名.可以查看所有的字符串的内置方法,如:1> count:统计字符个数。a = 'hello,world'res= a.count('l') #统计字符串hello,world里面l的个数print(res)result:E:\Learning...

weixin_39750731的博客 228

python中常用的内置方法

python中常用的内置方法 min(3,4) #取两个参数中的最小值 max(3,4) #取两个参数中的最大值 sum(range(1,101)) #使用sum()方法求和 sum(range(1,101,2)) sum(range(2,101,2)) # 枚举:返回索引值和对应的value for i, v in enumerate('hello'): # print(i,v...

weixin_42996595的博客 148

Python列表的内置方法

下图中是想将两个列表合并为1个,若用append,是将holiday整个列表作为1个元素追加到了workday的最后,如果只想取"星期六",使用workday[5]取的将会是["星期六","星期天"],明显不是所要的结果。列表内置方法与字符串稍有不同,列表的内置方法操作是不赋予给变量,而是直接用。list.reverse()与list = list[::-1]结果一致。对大小写字母排序,从大写到小写。赋予给变量,结果为None。若不传参,默认删除最后一个。所以使用extend()

Java_fenxiang的博客 394

python 内置属性和方法

本文总结了Python类中的特殊属性和方法。主要包括:1)类与实例的内置属性(如__dict__、__class__等);2)信息格式化方法(str、repr);3)调用操作(__call__方法使实例可调用);4)索引和切片操作;5)比较操作(eq、__gt__等);6)遍历操作(__iter__和__getitem__实现迭代);7)描述器基础。通过代码示例演示了这些特殊方法的使用场景和实现方式,如__str__定制打印格式、__call__实现偏函数功能等,帮助深入理解Python面向对象编程特性。

weixin_44907149的博客 2036

python 内置方法赋值_python 内置方法

1.__getattr__:访问不存在的成员2.__getattribute__:访问成员的时候默认调用该函数,而一般不会调用__getattr__,只有出现异常,才会转到__getattr__处理。如果要重写该函数,不要使用return self.__dict__[name] ,会造成死循环3.__setattr__:将等式右边的值赋予左边的成员,调用该方法。4.__get__:描述符必选,(描...

weixin_33865942的博客 100

python内置属性与内置方法

一、类方法 类方法:把类看作成一个对象 #语法: #@classmethod----由@开头的叫做装饰器或者修饰器 #def 类方法名(cls,形参): 类方法可以直接使用----->类对象.类方法名() class People02: def __init__(self,name,age): self.name=name self.age=age @classmethod#只针对下面第一个方法生效 def say(cls):#类方法

小长的博客 582
上一篇: Python装饰器
下一篇: scrapy爬虫后IP地址被ban解决方案
Class_guy
博客等级 码龄9年 43粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值