|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 这道题太难了 于 2021-9-2 17:48 编辑
原文中代码如下:
- class CapStr(str): #申明一个名字叫CapStr的类,继承str类的所有属性和方法。
- def __new__(cls, string):
- string = string.upper()
- return str.__new__(cls, string)
- a = CapStr("I love fishC.com")
- print("使用__new__方法获得的类的对象的值为:%s,数据类型为:" % a, type(a))
复制代码
我自己又另外写了一个函数:
- def CapStr(string):
- string = string.upper()
- return string
- s = CapStr("I love fishC.com")
- print("使用函数方法获得的类的对象的值为:%s,数据类型为:" % s, type(s))
复制代码
运行结果如下:
- 使用__new__方法获得的类的对象的值为:I LOVE FISHC.COM,数据类型为: <class '__main__.CapStr'>
- 使用函数方法获得的类的对象的值为:I LOVE FISHC.COM,数据类型为: <class 'str'>
复制代码
综上所属,我有了一些自己的理解:各种数据类型(int、string、bool等)均属于一个个类,我们在创建类的时候特别是继承类的时候相当于创建了一个新的数据类型,不同之处在于我们自己创建的数据类型可以在父类的基础上进行修改。
在实际代码编写过程中调用方法都一样,都是通过a = CapStr("I love fishC.com")的方式来获取所需要的数据,只不过实现方式不一样:
使用__new__方法是在创建对象a时就直接得到了想要的值,使用函数方法则是让原对象通过运算得到。
所以我猜测,当需要大量获取此类值时,使用__new__方法比使用函数重复运算的方法效率要高。但如果数据量不大时,尤其对于新手而言,其实使用函数就够了也更不容易出错?不知道这么理解对不对?会不会存在一种只能使用__new__方法不能使用函数的情况?
|
|