iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >课时41:魔法方法:构造和析构
  • 653
分享到

课时41:魔法方法:构造和析构

课时方法魔法 2023-01-30 22:01:41 653人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录:   一、_ _init_ _(self[, ...])   二、_ _new_ _(cls[, ...])   三、_ _del_ _(self)   四、课时41课后习题及答案   说的那么厉害,那什么是魔法方法呢? (1)魔法

目录:

  一、_ _init_ _(self[, ...])

  二、_ _new_ _(cls[, ...])

  三、_ _del_ _(self)

  四、课时41课后习题及答案

 

说的那么厉害,那什么是魔法方法呢?

(1)魔法方法总是被双下划线包围,例如_ _init_ _()。

(2)魔法方法是面对对象的python的一切。

(3)魔法方法的“魔力”体现在它们总能够在适当的时候被调用。

 

**************************

一、_ _init_ _(self[, ...])

**************************

之前我们讨论过 _ _init_ _()方法,说它相当于其它面向对象编程语言的构造方法,也就是类在实例化成对象的时候首先会调用的一个方法。

也许你会问:“有些时候在定义时写_ _init_ _()方法,有些时候却没有,这是为什么呢?”举个例子:

#p12_1.py
class Rectangle:
      """
      定义一个矩形类,
      需要长和宽两个数据,
      拥有计算周长和面积的两个办法。
      拥有对象在初始化的时候拥有"长"和"宽"两个参数,
      因此需要重写_ _init_ _()方法,因为我们说过,
      _ _init_ _()方法是类在实例化成对象的时候首先会调用的一个方法,
      """
      def __init__(self,x,y):
            self.x = x
            self.y = y

      def getPeri(self):
            return (self.x + self.y) * 2

      def getArea(self):
            return self.x * self.y
>>> #先运行p12_1.py
>>> rect = Rectangle(3,4)
>>> rect.getPeri()
14
>>> rect.getArea()
12

这里需要注意的是,_ _init_ _()方法的返回值一定是None,不能是其它:

>>> class A:
    def __init__(self):
        return "A for A - Cup"

    
>>> cup = A()
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    cup = A()
TypeError: __init__() should return None, not 'str'

所以一般在需要进行初始化的时候才重写__init__()方法。其实,这个__init__()并不是实例化对象时第一个被调用的魔法方法。

 

***************************

二、_ _new_ _(cls[, ...])

***************************

_ _new_ _()才是在一个对象实例化的时候所调用的第一个方法。它跟其它魔法方法不同,它的第一个参数不是self而时这个类(cls),而其它参数会直接传递给_ _init_ _()方法的。

_ _new_ _()方法需要返回一个实例对象,通常是cls这个类实例化的对象,当然你也可以返回其它对象。

_ _new_ _()方法平时很少去重写它,一般让Python用默认的方案执行就可以了。但是又一种情况需要重写这个魔法方法,就是当继承一个不可变的类型的时候,它的特性就显得尤为重要了。

>>> class CapStr(str):
    def __new__(cls,string):
        string = string.upper()
        return str.__new__(cls,string)

    
>>> a = CapStr("I love ZWW")
>>> a
'I LOVE ZWW'

这里返回str.__new__(cls,string)这种做法是值得推崇的,只需要重写我们关注的那部分内容,然后其它的琐碎东西交给Python的默认机制去完成就可以了,毕竟它们出错的几率要比我们自己写小很多。

 

*********************

三、_ _del_ _(self)

*********************

如果说__init__()和__new__()方法是对象的构造器的话,那么Python也提供了一个析构器,叫做__del__()方法。当对象将要被销毁的时候,这个方法就会被调用。但一定要注意的是,并非del x就相当于自动调用x.__del__(),__del__()方法是当垃圾回收这个对象的时候调用的。举个例子:

>>> class C:
    def __init__(self):
        print("我是__init__()方法,我被调用了...")
    def __del__(self):
        print("我是__del__()方法,我被调用了...")

        
>>> c1 = C()
我是__init__()方法,我被调用了...
>>> c2 = c1
>>> c3 = c2
>>> del c1
>>> del c2
>>> del c3
我是__del__()方法,我被调用了...

 

*******************************

四、课时41课后习题及答案

*******************************

 

--结束END--

本文标题: 课时41:魔法方法:构造和析构

本文链接: https://www.lsjlt.com/news/179360.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 课时41:魔法方法:构造和析构
    目录:   一、_ _init_ _(self[, ...])   二、_ _new_ _(cls[, ...])   三、_ _del_ _(self)   四、课时41课后习题及答案   说的那么厉害,那什么是魔法方法呢? (1)魔法...
    99+
    2023-01-30
    课时 方法 魔法
  • Python编程基础之构造方法和析构方法详解
    目录一、本讲学习目标二、构造方法(一)概述(二)案例演示三、析构方法(一)概述(二)案例演示四、self的使用(一)self概述(二)案例演示总结一、本讲学习目标 1.掌握构造方法的...
    99+
    2024-04-02
  • php构造方法和java构造方法有哪些区别
    这篇文章主要介绍“php构造方法和java构造方法有哪些区别”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php构造方法和java构造方法有哪些区别”文章能帮助大家解决问题。区别:1、重写子类构造函...
    99+
    2023-06-29
  • java构造器 默认构造方法及参数化构造方法
    目录1、构造器1.1 权限修饰符是public 1.2 显示定义构造器1、构造器 构造器也叫构造方法、构造函数,是一种特殊类型的方法,负责类中成员变量(域)的初始化。构造器的用处是在...
    99+
    2024-04-02
  • 课时49:魔法方法:生成器
    目录:   一、生成器   二、课时49课后习题及答案   ********************* 一、生成器 ********************** 生成器的学习并不涉及魔法方法,甚至它巧妙地避开了类和对象,仅通过普通地函数就...
    99+
    2023-01-30
    生成器 课时 方法
  • 课时44:魔法方法:简单定制
    目录:   一、简单定制   二、课时44课后习题及答案   **************** 一、简单定制 **************** 基本要求:1>> 定制一个计时器的类2>> start和stop方法代...
    99+
    2023-01-30
    课时 简单 方法
  • 课时47:魔法方法:定制序列
    目录:  一、定制序列   二、课时47课后习题及答案   **************** 一、定制序列 **************** 本节要谈的是定制容器,要想成功的实现容器的定制,便需要先谈一谈协议。协议是什么? 协议(Prot...
    99+
    2023-01-30
    课时 序列 方法
  • 课时42:魔法方法:算术运算
    目录:   一、算术运算符   二、课时41课后习题及答案    现在来讲一个新名词:工厂函数。Python2.2以后,对类和类型进行了统一,做法就是将int()、float()、str()、list()、tuple()这些BIF转换为工...
    99+
    2023-01-30
    算术 课时 方法
  • String的构造方法和一般方法
    public class StringTest{     public static void main(Strin...
    99+
    2024-04-02
  • 课时43:魔法方法:算术运算2
    目录:   一、反运算   二、增量赋值运算   三、一元操作符   四、课时43课后习题及答案   ************* 一、反运算 ************* 下表列举了反运算相关的魔法方法: __radd__(self, o...
    99+
    2023-01-30
    算术 课时 方法
  • Java构造方法和方法重载详解
    目录第一 构造方法的作用第二 构造方法的特点方法重载总结类的结构包括 : 1. 成员变量 2. 成员方法 3. 构造方法 4. 代码块 5. 内部类 第一 构造方法的作用 主要有以下...
    99+
    2024-04-02
  • python3的构造方法
    1. 作用创建对象时初始化实例变量2. 语法格式def __init__(self[,形式参数列表])    语句3.说明 1.构造方法必须为   __init__ 不可改变 2.在一个类中,只能有一个__init__构造方法起作用(有多个...
    99+
    2023-01-31
    方法
  • Java如何构造DSL方法重构
    目录DSL特点小结DSL Domain-specific language: 一种专注于某一领域,仅针对部分表达方式的计算机编程语言。 特点 方法链 Method Chaining功...
    99+
    2024-04-02
  • Java有参构造方法与无参构造方法(完全理解)
    文章目录 前言有参构造方法无参构造方法定义四个类说明情况(如果还不清晰请看)Lombok的基本使用 前言 遇到了就简单写一下吧,如果能够对你有帮助,点个赞吧。首先清晰明了的了解到有参构造方法与无参构造方法、以及应用,然后实战...
    99+
    2023-08-16
    java intellij-idea 开发语言
  • 深入浅析Java中的构造方法
    深入浅析Java中的构造方法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。构造函数是一种特殊的函数。其主要功能是用来在创建对象时初始化对象, 即为v对象成员变量赋初始值,总...
    99+
    2023-05-31
    java 构造方法 ava
  • PHP中__construct()构造方法
    这篇文章将为大家详细讲解有关PHP中__construct()构造方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php有什么特点1、执行速度快。2、具有很好的开放性和可扩展性。3、PHP支持多种主流与...
    99+
    2023-06-14
  • python重写方法和重写特殊构造方法
    目录继承多继承的优缺点子类的方法__init__()重写父类的方法将实例用作属性继承 编写类时,并非总是要从空白开始,如果编写的类是另一个现成类的特殊版本,可使用继承,继承分为单继承...
    99+
    2024-04-02
  • Java构造方法的定义和重载
    本篇内容介绍了“Java构造方法的定义和重载”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 一、构造方法的定义(一)什么构造方法实...
    99+
    2023-06-15
  • Spring源码解析之推断构造方法
    Spring推断构造方法 贴个测试代码直接开干,这只是个样例,其他情况自行分析 @Component public class OrderService { public ...
    99+
    2024-04-02
  • XSL循环构造的方法
    这篇文章主要讲解了“XSL循环构造的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“XSL循环构造的方法”吧!XSL(EXtensible Stylesh...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作