本帖最后由 阿奇_o 于 2021-7-15 12:15 编辑
a = C2F(0) 意味着 __new__首先被调用,生成和返回相应的 实例对象(即 self),并传入 __init__(self, value) 的self ,
也就是 __new__ 总是先于 __init__ ,不然就没有 self (相关变量和内存没有开辟出来,没法做任何事) ,
另外一点是 __new__的参数 arg 就是 a = C2F(0) 中的 0 ,这0 同时也传给 __init__的value参数。
还有一点是 print(x) 实际上,是调用 x对象的特殊方法__str__() , 即 x.__str__()
故你若要 “初始化”时,就看到 转化后的 华摄氏度,那就 可以直接 print(self),即相当于 print(self.__str__())
而 self 就是 __new__() 生成和返回的 转化后的float数据类型
>>> class c2f(float):
def __new__(cls, arg=0.0):
return float.__new__(cls, arg * 1.8 + 32)
def __init__(self, value):
print(value)
>>> a = c2f(0)
0
>>> type(a)
<class '__main__.c2f'>
>>> print(a)
32.0
>>> a.__str__()
'32.0'
>>> class c2f(float):
def __new__(cls, arg=0.0):
return float.__new__(cls, arg * 1.8 + 32) # 调用float父类的__new__创建对象方法,返回一个转换为华氏度的浮点数
def __init__(self, value):
print(self) # self 就是 由__new__() 先生成的实例对象,然后传给 __init__()
print(self.__str__())
print(value)
>>> b = c2f(0)
32.0
32.0
0
>>> c = c2f(10)
50.0
50.0
10
|