[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
        
        #???

  

posted @ 2019-03-17 21:43  Alimy  阅读(392)  评论(0编辑  收藏  举报