开始Python -- Magic方法(2)

Python 中的魔术方法(Magic Methods) Python魔术方法(Magic Methods)是双下划线包围的特殊方法(如__init__),用于让自定义类支持运算符、内置函数等高级特性。 阅读详情

4、property()函数

l         property()函数只能用于new-style类,使用和属性相同的访问方式来替代访问方法(getter/setter方法)

class Rectangle(object):

    def __init__(self):

        self.width = 0

        self.height = 0

    def setSize(self, size):

        self.width, self.height = size

    def getSize(self):

        return self.width, self.height

    size = property(getSize, setSize)

l         下面是使用size访问的例子:

>>> r = Rectangle()

>>> r.width = 10

>>> r.height = 5

>>> r.size

(10, 5)

>>> r.size = 150, 100

>>> r.width

150

l         property()函数有4个可选参数,分别对应fget(getter方法)、fset(setter方法)、fdel(delete方法)和doc(docstring),如果只提供setter方法,可以使用keyword参数指定

 

5、静态方法和类方法

l         静态方法和类方法都是使用类名直接调用,区别是:静态方法不需要定义self参数,而类方法需要定义类似self的cls参数,在调用时会自动绑定到当前类

l         下面是使用“@修饰符”的形式来定义这些方法的例子:

class MyClass:

    @staticmethod

    def smeth():

        print 'This is a static method'

    @classmethod

    def cmeth(cls):

        print 'This is a class method of', cls

l         下面是调用这些方法的例子:

>>> MyClass.smeth()

This is a static method

>>> MyClass.cmeth()

This is a class method of __main__.MyClass

 

6、Iterator

l         对象可以具有Iterator功能,只要实现下面的方法:

Ø         __iter__():返回Iterator(通常是对象本身),用于for循环

Ø         next():用于返回下一个Iterator的值,如果没有值可以返回,需要抛StopIteration异常

l         下面是Fibonacci数列Iterator化的例子:

class Fibs:

    def __init__(self):

        self.a = 0

        self.b = 1

    def next(self):

        self.a, self.b = self.b, self.a+self.b

        return self.b

    def __iter__(self):

        return self

l         下面是调用的例子:输出大于1000的最小Fibonacci数值:

>>> fibs = Fibs()

>>> for f in fibs :

...      if f > 1000 :

...               print f

...               break

...     

1597

 

7、Generator

l         Generator是一类Iterator,但定义成函数的语法,在函数中包含yield语句:每次调用yield语句时,停止执行后面的,返回yeild的值;等待唤醒后执行之后的语句

def flatten(nested):

    for sublist in nested:

        for element in sublist:

            yield element

l         遍历Generator:

>>> nested = [[1, 2], [3, 4], [5]]

>>> for num in flatten(nested): print num,

...

1 2 3 4 5

l         转换成List:

>>> list(flatten(nested))

[1, 2, 3, 4, 5]

(1) 递归

l         上面的例子只有两层,下面是支持递归的版本:

def flatten(nested):

    try:

        for sublist in nested:

            for element in flatten(sublist):

                yield element

    except TypeError:

        yield nested

l         下面是递归调用的例子:

>>> list(flatten([[[1],2],3,4,[5,[6,7]],8]))

[1, 2, 3, 4, 5, 6, 7, 8]

(2)处理string-like对象

l         String本身就是Sequence,可以进行遍历,所以需要屏蔽掉这种情况,下面是改善的版本:

def flatten(nested):

    try:

        # Don't iterate over string-like objects:

        try: nested + ''

        except TypeError: pass

        else: raise TypeError

        for sublist in nested:

            for element in flatten(sublist):

                yield element

    except TypeError:

        yield nested

l         下面是调用的例子:

>>> list(flatten(['foo', ['bar', ['baz']]]))

['foo', 'bar', 'baz']

 

 
用magic方法让Python支持方法重载 1. 你真的了解方法重载吗?方法重载是面向对象中一个非常重要的概念,在类中包含了成员方法和构造方法。如果类中存在多个同名,且参数(个数和类型)不同的成员方法或构造方法,那么这些成员方法或构... 阅读详情

相关推荐

PSINS工具箱15状态组合导航仿真程序(test_SINS_GPS_153)浅析-卡尔曼滤波设置+导航解算

文章目录test_SINS_GPS_153源码poserrsetkfinitgabiaskfupdate流程 test_SINS_GPS_153源码 poserrset function poserr = poserrset(dpos0, dlon, dhgt) % position errors dpos=[dlat;dlon;dhgt] setting. % % Prototype: poserr = poserrset(dpos0) % Input: dpos0=[dlat; dlon; dhgt],

十八与她的博客 2161

magic,一个超厉害的 Python 库!

在某些情况下,系统提供的magic文件可能不满足特定应用的需求。magic库允许指定自定义的magic文件来增强识别能力或支持更多的文件类型。# 指定自定义的magic文件路径# 使用自定义的magic文件来识别文件类型这个示例演示了如何加载自定义的magic文件,用于识别不常见或特定格式的文件。如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

涛哥聊Python 2万+

二、频率调制光谱(FMS)技术——error信号的数学模型及其他推论

一些推论。

qq_41111336的博客 1606

No module named ‘magic‘ 或者ImportError: failed to find libmagic. Check your installation

magic模块是用来识别文件名类型的模块,其中有python的接口。但是windows下直接import magic使用magic模块的时候,可能会报错No module named 'magic' ,或者ImportError: failed to find libmagic. Check your installation的错误。 网上有一些稍微复杂的安装方式,笔者没有尝试,这边进行简单的pip安装然后成功解决这个问题,可以给大家做个参考。 如果这时候直接pip install magci安装是不行

CaiDou的博客 8190

Flutter UI代码生成实战:Cursor与MCP的企业级规范适配

本文探讨了在企业级Flutter项目中,如何通过配置Cursor Rules与定制Figma MCP工具,为AI代码生成设定严格的开发规范。该方法解决了AI生成代码与现有项目架构、命名约定及资源引用规范脱节的核心痛点,实现了从Figma设计稿到高质量、可维护Flutter UI代码的自动化流程,显著提升团队协作效率与代码一致性。

http9protocoller的博客 280

StarRC常见问题整理

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?使用starrc_cmd “错误代码”就能看对应Error或Warnning的解释。

m0_61544122的博客 3128

Python文件类型识别——python-magic

python-magic是文件类型识别库libmagic的Python接口。libmagic根据预定义文件类型列表检查文件头来识别文件类型。

XerCis的博客 8263

【目标检测】基于yolov5的道路坑洼检测(附代码和数据集)

基于yolov5的道路坑洼检测(附代码和数据集)

学无止境、积少成多、厚积薄发 4620

[497]python使用magic模块进行文件类型识别

python-magic是libmagic文件类型识别库的python接口。 libmagic通过根据预定义的文件类型列表检查它们的头文件来识别文件类型。 这个功能通过Unix命令文件暴露给命令行。 安装magic pip install python-magic pip install python-magic-bin # encoding=utf-8 import magic #pip i...

周小董 3149

工业仪表读数识别:YOLO目标检测 + OCR混合方案实战

仪表整体(meter):粗定位整只仪表,用于快速裁剪、排除背景干扰表盘区域(dial):精确的圆形/方形表盘区域,用于后续矫正和读数数字区域(display)/指针(pointer):数显表定位数码管区域,指针表可辅助定位指针为什么要分三级?因为现场仪表安装角度、距离、光照差异极大。先粗检再精检,比一步到位的准确率高很多,也方便后续做透视变换。工业仪表读数识别,技术路线的选择比算法精度更重要。选对了路线,事半功倍;选错了,怎么调都达不到验收标准。几条落地建议:指针表优先传统算法。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 96

10、网络安全工具:Bettercap 与 Web 应用测试工具全解析

本文详细解析了网络安全工具Bettercap及其在中间人攻击和无线攻击中的应用,同时介绍了多种Web应用测试工具,如Amass、Cadaver、Dirb等,并探讨了工具的使用场景、流程、注意事项以及未来发展趋势,为网络安全测试提供了全面的指导。

u0v1w2x3的博客 228

PDF转markdown工具:magic-pdf

将magic-pdf.template.json文件修改为magic-pdf.json放在系统目录,不同的系统默认目录不同,测试使用cpu执行,内存16g,3页pdf解析大概2分钟, 页数过多会崩掉。有些公式好像解析的不太对,整体可用。可以是单个 PDF 文件,也可以是包含多个 PDF 的目录。结果将保存在目录中。magic-pdf.template.json 中models-dir修改为模型的下载路径。

AI知识搬运工 4万+

Windows窗口编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint等函数详解

Windows窗口编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint等函数详解

dvlinker的技术专栏 7166

python-magic终极指南:如何快速掌握文件类型识别的完整方法

想要准确识别文件类型却总被文件扩展名欺骗?😱 python-magic就是你的救星!这个强大的Python库通过分析文件内容而非扩展名,为你提供最精准的文件类型识别解决方案。无论你是开发文件上传系统、构建自动化处理工具,还是需要安全检测文件内容,python-magic都能成为你最可靠的助手。🎯 ## 为什么python-magic是文件识别的最佳选择? 在数字世界中,文件扩展名常常不可靠

gitblog_00483的博客 894

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MinerU、Magic-PDF、Magic-Doc

一、关于 MinerU 二、Magic-PDF 1、简介 2、项目全景 3、流程图 4、子模块仓库 三、Magic-PDF 上手指南 1、配置要求 2、安装配置 1. 安装Magic-PDF 2. 下载模型权重文件 3. 拷贝配置文件并进行配置 4. 使用CUDA或MPS加速推理 CUDA MPS 3、使用说明 1) 通过命令行使用 直接使用 更多用法 2) 通过接口调用 本地使用 在对象存储上使用 4、常见问题处理解答 四、Magic-Doc 1、简介 2、安装 3、使用示例 4、性能

AI工程化、开源分享、文档翻译、代码笔记 6万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Python基础:魔术方法Magic Method

经过之前编章的介绍,我们知道在 Python 中,常见的容器类型有: dict, tuple, list, string。其中也提到过可容器和不可变容器的概念。其中 tuple, string 是不可变容器,dict, list 是可变容器。可变容器和不可变容器的区别在于,不可变容器一旦赋值后,不可对其中的某个元素进行修改。当然具体的介绍,可以看回之前的文章,有图文介绍。那么这里先提出一个问题,这些数据结构就够我们开发使用吗?

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 2197

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

python-magic has no attribute ‘from_file‘

python-magic has no attribute ‘from_file’ 原因是版本不一样的问题, 在网上搜到可能有人是这样安装的magic: pip install python-libmagic pip install filemagic 要想使用含有from_file的版本的magic,可以首先卸载已经安装的magic pip uninstall python-libmagic pip uninstall filemagic 之后使用如下这种方法安装magic(python2 、pyt

RockU1的博客 1459

python如何区分文件类型_python--magic module 文件类型识别

前言:接触magic module是由于工作中对的文件类型判断需求,网上查了下,python内置的有mimetypes module,filetype module,与使用mimetypes库相比,更可靠的方法是使用magic软件包。magicmagic是libmagic文件标识库的封装,libmagic是一个根据文件头识别文件类型的开发库,因此可以实现对文件类型的判断,在Django上,还可以确...

weixin_42501848的博客 770

python类:magic魔术方法

http://blog.youkuaiyun.com/pipisorry/article/details/50708812魔术方法是面向对象Python语言中的一切。它们是你可以自定义并添加“魔法”到类中的特殊方法。它们被双下划线环绕(比如__init__或__lt__)。在Python中,我们可以通过”魔术方法”使自定义的class变得强大、易用。例如当我们想定义一个可迭代的类对象的时候,就可以去实现”__

皮皮blog 8152

python-magic模块报错无valid magic files问题

这个是因为在debug中看到了被编码过的路径,灵光一闪感觉不对劲(因为之前也有用过中文路径,那种情况下debug是不会出现路径名被编码的)在前面它自动获取了库下magic.mgc的路径(这个就是magic文件),并且做了判断,由于我是默认安装在user目录下。实在没办法后,在朋友的笔记本上试了一下,发现都可以运行。这时我才意识到可能是我的环境除了问题,折腾半天重装了python之后发现仍然没用。这是什么原因造成的呢,magic files是linux相关设备自带的一个文件,用于类型识别。

m0_74024372的博客 1273

开始Python -- Magic方法(1)

1、构造函数(1) __init__l         要为类提供构造函数,只要在类中实现__init__()方法:class FooBar:         def __init__(self):                 self.somevar = 42 >>> f = FooBar()>>> f.somevar42l         可

Dynamic Script Language 1664

python中的魔法方法 (Magic Methods)有哪些?总结。

Python魔法方法(双下方法)是特殊方法,以双下划线开头和结尾,用于自定义类行为。主要类别包括:1)对象生命周期(new、init、del);2)对象表示(str、repr);3)比较操作(eq、__lt__等);4)算术运算(add、__sub__等);5)容器类型(len、__getitem__等);6)可调用对象(call)。其他重要方法还包括属性访问、描述符协议和上下文管理。这些方法让自定义类能像内置类型一样工作,遵循Python惯例,写出更Pythonic的代码。

yuanpan的专栏 860

python bad magic number_科学网-python反编译软件推荐uncompyle6-Bad magic number in .pyc-陈照强的博文...

背景从友方那边获得了pyc文件,但是由于他当时用的是python2.6编译的,而现在python2.6几乎被淘汰掉了,安装了python2.7 等其他版本无法运行该pyc文件,报错 RuntimeError: Bad magic number in .pyc file 。安装了python 2.6 后,运行该文件不报错,但是依赖模块openbabel,openbabel在python2.6中安装稍...

weixin_39701735的博客 4496

python识别文件格式_python使用magic模块进行文件类型识别方法

代码实例python-magic是libmagic文件类型识别库的python接口。 libmagic通过根据预定义的文件类型列表检查它们的头文件来识别文件类型。 这个功能通过Unix命令文件暴露给命令行。>>> import magic>>> magic.from_file("testdata/test.pdf")'PDF document, version ...

weixin_39761696的博客 672

python magic number,boost.python 做出来的pyc报bad magic number

排查pythonsrc呗:pythonrun.cstaticPyObject*run_pyc_file(FILE*fp,constchar*filename,PyObject*globals,PyObject*locals,PyCompilerFlags*flags){PyCodeObject*co;PyObject*v;longmagic;longPyImport...

weixin_30700123的博客 1万+

matlab的magic函数,python实现类似于Matlab中的magic函数

参考这篇文章的代码封装了一个类似Matlab中的magic函数,用来生成魔方矩阵。#!/usr/bin/env python# -*- coding: utf-8 -*-import numpy as npdef magic(n):row,col=0,n//2magic=[]for i in range(n):magic.append([0]*n)magic[row][col]=1for i in...

weixin_42349182的博客 1051
上一篇: 开始Python -- Magic方法(1)
下一篇: 开始Python -- 模块(Modules)
ruby_beginner
博客等级 码龄21年 9粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值