xiaofan1228 发表于 2020-3-3 14:30:16

【第41讲】视频内容

本帖最后由 xiaofan1228 于 2020-3-3 14:37 编辑

#小甲鱼视频教程原文
class CapStr(str):
    def __new__(cls, string):
      string = string.upper()
      return str.__new__(cls, string)
#最后一行用return string 结果是一样的,意义一样吗?

zltzlt 发表于 2020-3-3 14:41:44

当然不一样(type 不一样)

>>> class CapStr(str):
    def __new__(cls, string):
      string = string.upper()
      return str.__new__(cls, string)

>>> type(CapStr('1'))
<class '__main__.CapStr'>
>>> class CapStr(str):
    def __new__(cls, string):
      string = string.upper()
      return string   # 替换成 return string

>>> type(CapStr('1'))
<class 'str'>

xiaofan1228 发表于 2020-3-3 14:56:25

zltzlt 发表于 2020-3-3 14:41
当然不一样(type 不一样)

那这一讲的课后题答案岂不是也有问题了?
要求定义一个 Nstr 类,支持字符串的相减操作:A – B,从 A 中去除所有 B 的子字符串。
这样返回的type还是 str
class Nstr(str):
    def __sub__(self, other):
      return self.replace(other, '')

zltzlt 发表于 2020-3-3 15:01:17

xiaofan1228 发表于 2020-3-3 14:56
那这一讲的课后题答案岂不是也有问题了?
要求定义一个 Nstr 类,支持字符串的相减操作:A – B,从 A...

是的,这样会更好:

>>> class Nstr(str):
    def __sub__(self, other):
      return Nstr(self.replace(other, ''))

>>> a = Nstr('123456') - Nstr('1234')
>>> type(a)
<class '__main__.Nstr'>
>>> a
'56'

xiaofan1228 发表于 2020-3-3 15:08:22

zltzlt 发表于 2020-3-3 15:01
是的,这样会更好:

学习了,感谢!!
页: [1]
查看完整版本: 【第41讲】视频内容