第041讲: 魔法方法:构造和析构 | 学习记录(小甲鱼零基础入门学习Python)

(标答出处: 鱼C论坛)
《零基础入门学习Python》

测试题
在这里插入图片描述
答:魔法方法很容易辨认,格式为:__ 方法名 __
在这里插入图片描述
答:__ new __方法,他和其他魔法方法不同,他的第一个参数不是self,而是这个类 cls ,而其他的参数会直接传递给 __ init 方法。
在这里插入图片描述
答:当我们的实例化对象需要有明确的初始化方法的时候。
第041讲: 魔法方法:构造和析构 | 学习记录(小甲鱼零基础入门学习Python)_第1张图片
答: __ init __ 方法只能返回 None ,而不能返回int、string等其他东西。例如,
第041讲: 魔法方法:构造和析构 | 学习记录(小甲鱼零基础入门学习Python)_第2张图片
在这里插入图片描述
答: __ new __ 的主要任务是返回一个实例对象,通常是cls这个类的实例化对象,当然也可以返回其他对象。
在这里插入图片描述
答:
init __ 和 __ new __ 方法是对象的构造器,那么 __ del __ 方法就是析构器,当对象将要被销毁的时候,这个方法就会被调用,

但是要注意的是,并非del x 就相当于自动调用x.__ del __ (), __ del __ 方法是当垃圾回收机制回收这个对象的时候调用的。

动动手
在这里插入图片描述

class FileObject :
    """给文件对象进行包装从而确认在删除时文件流关闭"""

    def __init__ (self , filename = 'sample.txt') :
        """打开一个文件"""
        self.new_file = open (filename , 'r+')

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

第041讲: 魔法方法:构造和析构 | 学习记录(小甲鱼零基础入门学习Python)_第3张图片

class C2F(float) :
    def __new__ (cls , arg = 0.0):
        return float.__new__(cls,arg*1.8+32)

print (C2F(32))

运行结果:
第041讲: 魔法方法:构造和析构 | 学习记录(小甲鱼零基础入门学习Python)_第4张图片
第041讲: 魔法方法:构造和析构 | 学习记录(小甲鱼零基础入门学习Python)_第5张图片

class Nint(int) :
    def __new__ (cls , arg =0):
        if isinstance (arg , str) :
            total = 0
            for each in arg :
                total = total + ord (each)
            arg = total

        return int.__new__(cls,arg)

print (Nint(123))
print (Nint(1.5))
print (Nint('A'))
print (Nint('FishC'))

运行结果:
在这里插入图片描述

你可能感兴趣的:(第041讲: 魔法方法:构造和析构 | 学习记录(小甲鱼零基础入门学习Python))