[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
#???
~不再更新,都不让我写公式,博客园太拉胯了

浙公网安备 33010602011771号