1. 程式人生 > >小甲魚Python視頻第041課(魔法方法:構造和析構 )課後題及參考解答

小甲魚Python視頻第041課(魔法方法:構造和析構 )課後題及參考解答

oat 構造 all 魔法 繼承 return shc 公式 none

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

  

小甲魚Python視頻第041課(魔法方法:構造和析構 )課後題及參考解答