第041讲: 魔法方法:构造和析构 | 学习记录(小甲鱼零基础入门学习Python)
(标答出处: 鱼C论坛)
《零基础入门学习Python》
测试题
答:魔法方法很容易辨认,格式为:__ 方法名 __
答:__ new __方法,他和其他魔法方法不同,他的第一个参数不是self,而是这个类 cls ,而其他的参数会直接传递给 __ init 方法。
答:当我们的实例化对象需要有明确的初始化方法的时候。
答: __ init __ 方法只能返回 None ,而不能返回int、string等其他东西。例如,
答: __ 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
class C2F(float) :
def __new__ (cls , arg = 0.0):
return float.__new__(cls,arg*1.8+32)
print (C2F(32))
运行结果:
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'))
运行结果: