zoukankan      html  css  js  c++  java
  • [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
            
            #???
    

      

    ~不再更新,都不让我写公式,博客园太拉胯了
  • 相关阅读:
    hdu 4474 大整数取模+bfs
    Codeforces Mafia
    hdu 4750 Count The Pairs(并查集)
    zoj 3659 Conquer a New Region(并查集)
    zoj 3656
    poj 3678 Katu Puzzle(Two Sat)
    UVa 11235 RMQ
    hdu 4768 Flyer (二分)
    hdu 4762 Cut the Cake概率公式
    Ural 1046 Geometrical Dreams(解方程+计算几何)
  • 原文地址:https://www.cnblogs.com/alimy/p/10549101.html
Copyright © 2011-2022 走看看