开始Python -- Magic方法(1)

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

1、构造函数

(1) __init__

l         要为类提供构造函数,只要在类中实现__init__()方法:

class FooBar:

         def __init__(self):

                 self.somevar = 42

 

>>> f = FooBar()

>>> f.somevar

42

l         可以为构造函数提供参数:

class FooBar:

         def __init__(self, value=42):

                 self.somevar = value

 

>>> f = FooBar('This is a constructor argument')

>>> f.somevar

'This is a constructor argument'

l         重载构造函数的例子:

class Bird:

         def __init__(self):

                 self.hungry = 1

         def eat(self):

                 if self.hungry:

                                   print 'Aaaah...'

                                   self.hungry = 0

                 else:

                                   print 'No, thanks!'

 

class SongBird(Bird):

         def __init__(self):

                 self.sound = 'Squawk!'

         def sing(self):

                 print self.sound

l         由于重载构造函数时没有调用父类的构造函数,所以执行下面语句会抛异常:

>>> sb = SongBird()

>>> sb.sing()

Squawk!

>>> sb.eat()

Traceback (most recent call last):

  File "<interactive input>", line 1, in ?

  File "D:/workshop/src/python/bird.py", line 5, in eat

    if self.hungry:

AttributeError: SongBird instance has no attribute 'hungry'

(2)调用非绑定的父类构造函数

l         在子类的构造函数调用supperclass._init__(),由于是非绑定的,需要传递self

class SongBird(Bird):

         def __init__(self):

                 Bird.__init__(self)

                 self.sound = 'Squawk!'

         def sing(self):

                 print self.sound

l         这样就能正常调用eat()方法:

>>> sb = SongBird()

>>> sb.sing()

Squawk!

>>> sb.eat()

Aaaah...

(3) 使用supper()函数

l         supper()只能在new-style类中使用:基类必须继承object

l         调用supper()时,将当前的类和实例作为参数传递,调用__init__()时不需要传递self:

class Bird(object):

         def __init__(self):

                 self.hungry = 1

         def eat(self):

                 if self.hungry:

                                   print 'Aaaah...'

                                   self.hungry = 0

                 else:

                                   print 'No, thanks!'

 

class SongBird(Bird):

         def __init__(self):

                 super(SongBird, self).__init__()

                 self.sound = 'Squawk!'

         def sing(self):

                 print self.sound

l         使用supper()函数要比调用非绑定的父类构造函数更好,特别是多重继承时,只需要调用一次就行了

 

2、项目访问

l         为了使自己创建的类具有Sequence和Mapping的基本功能,可以实现下面的Magic方法:

Ø         __len__(self):返回项目的数目,对于Sequence是元素个数,对于Mapping是key/value对的个数

Ø         __getitem__(self, key):根据key返回值,对于Sequence,key为0~n-1(n为Sequence的长度,可以为负数),对于Mapping,key可以是任意值

Ø         __setitem__(self, key, value):保存值value到key指定的地方(对可变对象可用)

Ø         __delitem__(self, key):根据key删除值(对可变对象可用)

l         下面是一个实现的例子:

def checkIndex(key):

    """

    Is the given key an acceptable index?

    To be acceptable, the key should be a non-negative integer. If it

    is not an integer, a TypeError is raised; if it is negative, an

    IndexError is raised (since the sequence is of infinite length).

    """

    if not isinstance(key, (int, long)): raise TypeError

    if key<0: raise IndexError

   

class ArithmeticSequence(object):

    def __init__(self, start=0, step=1):

        """

        Initialize the arithmetic sequence.

        start - the first value in the sequence

        step - the difference between two adjacent values

        changed - a dictionary of values that have been modified by

        the user

        """

        self.start = start # Store the start value

        self.step = step # Store the step value

        self.changed = {} # No items have been modified

       

    def __getitem__(self, key):

        """

        Get an item from the arithmetic sequence.

        """

        checkIndex(key)

        try: return self.changed[key] # Modified?

        except KeyError: # otherwise...

            return self.start + key*self.step # ...calculate the value

   

    def __setitem__(self, key, value):

        """

        Change an item in the arithmetic sequence.

        """

        checkIndex(key)

        self.changed[key] = value # Store the changed value

l         下面是调用的一些例子,由于没有实现__delitem__(),所以del操作会抛异常:

>>> s = ArithmeticSequence(1, 2)

>>> s[4]

9

>>> s[4] = 2

>>> s[4]

2

>>> del s[4]

Traceback (most recent call last):

  File "<interactive input>", line 1, in ?

AttributeError: __delitem__

 

3、继承内建类

l         上面为实现内建类具有的功能,需要逐个实现方法,其实可以直接继承这些内建的类,重载需要调整功能的方法:

class CounterList(list):

    def __init__(self, *args):

        super(CounterList, self).__init__(*args)

        self.counter = 0

    def __getitem__(self, index):

        self.counter += 1

        return super(CounterList, self).__getitem__(index)

l         下面是调用的一些例子:

>>> cl = CounterList(range(10))

>>> cl

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

>>> del cl[3:6]

>>> cl.counter

0

>>> cl[4] + cl[2]

9

>>> cl.counter

2

 

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

相关推荐

Magic 1-For-1: 在一分钟内生成一分钟视频片段(基于Python实现,视频生成模型)

在本技术报告中,我们介绍了 Magic 1-For-1 (Magic141),这是一种高效的视频生成模型,具有优化的内存消耗和推理延迟。关键思想很简单:将文本到视频生成任务分解为两个单独的更简单的扩散步骤蒸馏任务,即文本到图像生成和图像到视频生成。我们验证了使用相同的优化算法,image-to-video 任务确实比 text-to-video 任务更容易收敛。我们还从三个方面探索了一系列优化技巧,以降低训练图像到视频 (I2V) 模型的计算成本:1) 通过使用多模态先验条件注入来加速模型收敛;2) 通过应

weixin_42380711的博客 1843

python类的构造函数是,Python类构造函数(静态)

Does Python have a mechanism for class constructors, i.e. a function that is called whenever the class is first referenced (as opposed to when an instance of that object is created)? I know this exist...

weixin_33445930的博客 335

Nvidia Tesla A100 驱动安装方法

Nvidia Tesla A100 驱动安装方法 遇到的问题:以前安装tesla系列、geforce系列等gpu 驱动的时候,只需执行nvidiaxxxx.run驱动包或者安装nvidiaxxxx.rpm包即可,但遇到新的GPU Nvidia Tesla A100的时候,安装完驱动似乎不起作用,找了半天资料,原来需要以下步骤才可以使用;

qq_24343177的博客 2万+

python类的构造方法是_如何在Python中创建构造函数(Constructor)

构造函数是Python使用类中的定义实例化对象时调用的一种特殊方法。Python依赖于构造函数来执行任务,例如初始化对象启动时将需要的任何实例变量(将值分配给对象)。构造函数还可以验证对象是否有足够的资源,并执行您可以想到的任何其他启动任务。构造函数的名称始终相同,即init()。必要时,构造函数可以接受参数来创建对象。当您创建没有构造函数的类时,Python会自动为您创建一个默认的构造函数,该构...

weixin_39762348的博客 1700

TDDFT计算软件Octopus学习笔记(二):基态计算(Si)

本文以硅为例,来进行基态计算。

陈啸的博客 7308

从零到一:ArduPilot无人船PID调参实战指南

本文详细介绍了ArduPilot无人船PID调参的实战指南,从基础参数设定到高级调参技术,帮助用户掌握水面环境下的PID控制逻辑。通过案例分析和参数示例,解决无人船在空载、负载变化及不同水域环境中的航行问题,提升无人船的稳定性和精确度。

weixin_29266647的博客 507

Python interview - Constructor

Python中的constructor就是构造器,简单来说就是class类中的__init__()

588

解决DevExpress汉化后不生效的5个常见问题及修复方法

本文详细解析了DevExpress汉化后不生效的5个常见问题及修复方法,包括汉化包部署位置验证、运行时缓存清除、权限与执行上下文排查、版本兼容性检测以及开发环境配置检查。通过实战案例和具体操作步骤,帮助开发者快速解决汉化失效问题,提升开发效率。

weixin_29232121的博客 261

python类和对象_Python类和对象

python类和对象Python is an object-oriented programming language. Python Classes and Objects are the core building blocks of Python programming language. Python是一种面向对象的编程语言。 Python类和对象是Python编程语言的核心构建块。 ...

从零开始的教程世界 744

一文读懂GAN, pix2pix, CycleGAN和pix2pixHD

本文翻译、总结自朱俊伟的线上报告,主要讲了如何用机器学习生成图片。 来源:Games2018 Webinar 64期 :Siggraph 2018优秀博士论文报告 人员信息 主讲嘉宾 姓名:朱俊彦(Jun-Yan Zhu) 现状:麻省理工学院博士后(PostDoc at MIT),计算机科学与人工智能实验室(Computer Science and Artificial In...

gdymind的博客 6万+

一张图读懂 SAP S/4HANA Cloud 与 SAP BTP 的扩展版图

本文解析了SAP S/4HANA Cloud的扩展技术谱系,提出扩展应分为on-stack(系统内)和side-by-side(并行)两种路径,并沿着低代码到专业代码的能力梯度进行分层。on-stack扩展包括面向业务人员的Key User Extensibility和面向开发者的Developer Extensibility,强调贴近核心业务对象;side-by-side扩展则依托SAP BTP平台,提供SAP Build低代码工具、CAP开发框架和ABAP云环境三种方案,支持解耦创新。文章通过五个真实案

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

Jupyter Notebook中使用的python magic魔法命令

在Jupyter Notebook中使用的Python的Magic命令 一.jupyter notebook 介绍: jupyter notebook 是一种基于网页的交互式的应用程序 简而言之就是一种可以在网页上编写,运行代码的一种交互式的应用程序,代码的结果会直接显示在cell下方。 jupyter notebook 官方介绍 二.magic命令: magic命令是在jupyter noteb...

qq_42851159的博客 2382

uni-app:实现APP设置手机闹钟+取消闹钟+响铃重复/文字等,帮用户设置好闹钟并备注文本,uni-app设置安卓系统闹钟和苹果ios系统闹钟(uniapp调用手机上的闹钟,详细示例代码demo)

uniapp设置安卓和iOS闹钟的插件,uni-app设置安卓系统闹钟,uniapp设置苹果ios系统闹钟,uniapp设置定时闹铃的完整解决方案,UniApp设置手机闹钟,uniApp如何设置手机闹铃,uniapp设置闹钟,设置闹钟提醒,uni-app设置安卓系统闹钟_通过uniapp设置原声闹钟,调用android系统闹钟,如何在App中启动系统闹钟,uniapp如何取消闹钟,通过调用ios的原生接口来设置手机闹钟,uni-app 调用手机闹钟功能,uniap调用ios系统闹钟,uniapp调用手机上的

✅ 精选推荐文章 4235

magic,一个超厉害的 Python 库!

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

涛哥聊Python 2万+

Veritas NetBackup8.1.1客户端安装

1.在客户机打开安装包运行Browser 2.选择NetBackup Client Software Installation 3.下一步 4.接受,下一步 5.我选择自定义安装,下一步 6.我选择安装到D盘 7.默认下一步 8.使用域管理账户 9.输入服务器安装了服务端的那一台名称 10.输入服务端生成的令牌,选择“I recognize the fingerprint for this host.Proceed with the certificate deploymen”下一步

万物皆可学 2万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

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

gitblog_00483的博客 894

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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万+

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

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

Magic 1-For-1部署指南:从本地环境到生产环境的完整配置

想要快速体验高效的视频生成技术吗?Magic 1-For-1是一款创新的视频生成模型,能够在短短一分钟内生成一分钟的高质量视频内容。这篇终极部署指南将带您从零开始,完成从本地环境搭建到生产环境配置的完整流程,让您轻松掌握这款强大的AI视频生成工具。 ## 🚀 为什么选择Magic 1-For-1? Magic 1-For-1采用了创新的任务分解策略,将文本到视频生成分为**文本到图像**和*

gitblog_00974的博客 1102

Magic 1-For-1视频质量提升技巧:7个方法改善生成视频的视觉效果

你是否在使用Magic 1-For-1进行视频生成时,希望获得更高质量的视觉效果?这个强大的AI视频生成工具能够在一分钟内生成一分钟的视频内容,但要获得最佳视觉效果,需要掌握一些关键技巧。本文将为你揭示7个实用的Magic 1-For-1视频质量提升方法,让你的生成视频更加专业、生动。 ## 📊 理解Magic 1-For-1的核心架构 Magic 1-For-1采用创新的两阶段架构设计,将

gitblog_00376的博客 1012

开始Python -- Magic方法(2)

4、property()函数l         property()函数只能用于new-style类,使用和属性相同的访问方式来替代访问方法(getter/setter方法)class Rectangle(object):    def __init__(self):        self.width = 0        self.height = 0    def

Dynamic Script Language 1483

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

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

weixin_42501848的博客 770

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

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

XerCis的博客 8263

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

Magic 1-For-1实战教程:从文本到高质量视频的完整生成流程

Magic 1-For-1是一款强大的文本到视频(T2V)生成工具,能够将文字描述转化为高质量视频内容。本教程将带你逐步了解如何使用Magic 1-For-1实现从文本到视频的完整生成流程,即使是新手也能快速上手。 ## 准备工作:环境搭建与安装 ### 1. 克隆项目仓库 首先需要将项目代码克隆到本地,打开终端执行以下命令: ```bash git clone https://gitco

gitblog_00004的博客 860

如何快速上手Magic 1-For-1:5步完成高效视频生成环境搭建

想要在1分钟内生成1分钟的高质量视频吗?Magic 1-For-1正是您需要的终极视频生成工具!这款革命性的AI视频生成模型通过创新的两阶段架构,将文本到视频生成任务分解为文本到图像和图像到视频两个子任务,大幅提升了生成效率并降低了内存占用。本文将为您提供完整的Magic 1-For-1快速上手指南,让您在5个简单步骤内搭建起专业的视频生成环境。 ## 🎯 Magic 1-For-1核心功能概

gitblog_01017的博客 934

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

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值