[Python]小甲鱼Python视频第041课(魔法方法:构造和析构 )课后题及参考解答
# -*- coding: utf-8 -*- """ Created on Sun Mar 17 21:13:58 2019 @author: fengs """ """ 测试题: 0. 是哪个特征让我们一眼就能认出这货是魔法方法 以双下划线开始,以双下划线结束 1. 类实例化对象所调用的第一个方法是什么? __new__ 2. 什么时候我们需要在类中明确写出 __init__ 方法? 重写 __init__ 方法,修改构造方法的内容 3. 请问下边代码存在什么问题? class Test: def __init__(self, x, y): return x + y 构造方法的返回值只能是None 4. 请问 __new__ 方法是负责什么任务? 为实例对象申请内存 ------------> __new__ 方法主要任务时返回一个实例对象,通常是参数 cls 这个类的实例化对象,当然你也可以返回其他对象。 是的 __new__ 可以返回其他对象,牛p 5. __del__ 魔法方法什么时候会被自动调用? del(object) """ """ 动动手 """ """ 0. 小李做事常常丢三落四的,写代码也一样,常常打开了文件又忘记关闭。你能不能写一个 FileObject 类,给文件对象进行包装,从而确认在删除对象时文件能自动关闭? """ class FileObject(): def __init__(self,file_full_path): self.file_object = open(file_full_path,'r') def __del__(self): self.file_object.close() del self.file_object """ 1. 按照以下要求,定义一个类实现摄氏度到华氏度的转换(转换公式:华氏度 = 摄氏度*1.8+32) """ class C2F(float): def __new__(cls,arg=0.0): return float.__new__(cls,arg*1.8+32) #def __init__(self,c_value): # self.c_value = float(c_value) # self.f_value = self.c_value * 1.8 + 32 #???? print(C2F(32)) """ 2. 定义一个类继承于 int 类型,并实现一个特殊功能:当传入的参数是字符串的时候,返回该字符串中所有字符的 ASCII 码的和(使用 ord() 获得一个字符的 ASCII 码值)。 实现如下: >>> print(Nint(123)) 123 >>> print(Nint(1.5)) 1 >>> print(Nint('A')) 65 >>> print(Nint('FishC')) 461 """ class Nint(int): def __new__(cls,arg = 0): if isinstance(arg,str): all = 0; for each in arg: all += ord(each) arg = all; return int.__new__(cls,arg) print(Nint(123)) print(Nint(1.5)) print(Nint('A')) print(Nint('FishC')) #def __init__(self,input_data): # self.input_data = input_data #???
~不再更新,都不让我写公式,博客园太拉胯了