python魔法方法
小甲鱼python书里161页讲的那个__new__(cls[,...])听了三遍实在听不懂啊
甲鱼哥说__new__()只有在继承一个不可变类型,又需要进行修改的时候它的特性才显得尤为重要,这句话无法理解,意思是说例子里的str和float是不可变类型吗?那修改又是啥意思?实在不知道这个__new__()有啥用,求大神结合下面两个例子教教我
书里的例子
# 把输入字符串都变成大写字母
class CapStr(str):
def __new__(cls,string):
string = string.upper()
return str.__new__(cls,string)
# 测试题1. 按照以下要求,定义一个类实现摄氏度到华氏度的转换(转换公式:华氏度 = 摄氏度*1.8+32)
class C2F(float):
"摄氏度转换为华氏度"
def __new__(cls, arg=0.0):
return float.__new__(cls, arg * 1.8 + 32) 你就简单理解成这个类的实例就是__new__的返回值就行了 本帖最后由 sunrise085 于 2020-8-28 16:53 编辑
int、float、str都是不可变类型
# 把输入字符串都变成大写字母
class CapStr(str):
def __new__(cls,string):
string = string.upper()
return str.__new__(cls,string)
str1=CapStr("I Love FishC")
print(str1)
这里str1是一个CapStr类的对象,传递进去的参数 string 是"I Love FishC"
最后一句print得到的是"I LOVE FISHC"
这就是这个方法__new__的功能,传递进去的是一个不可变类型的参数,但是又需要对其进行改变
再来个例子
# 测试题1. 按照以下要求,定义一个类实现摄氏度到华氏度的转换(转换公式:华氏度 = 摄氏度*1.8+32)
class C2F(float):
"摄氏度转换为华氏度"
def __new__(cls, arg=0.0):
return float.__new__(cls, arg * 1.8 + 32)
tem=C2F(20.5)
print(tem)
这里tem是一个C2F类的对象,传递进去的参数 arg是 20.5
最后一句print得到的是 68.9
其实这些不可变类型都有自己的__new__函数
例如:
int(2.3)# 传递进去的是float 2.3,得到的是 int 2
int('5')# 传递进去的是str '5',得到的是 int 5
str()# 传递进去的是list ,得到的是 str ''
页:
[1]