月照梨花 发表于 2020-9-27 15:46:35

关于类为什么要继承?

[课后作业] 第042讲 中的有的继承int,有的继承str,有的又不继承
https://fishc.com.cn/forum.php?mod=viewthread&tid=51543&extra=page%3D2%26filter%3Dtypeid%26typeid%3D398

第一段代码:
class Nstr(str):
    def __lshift__(self, other):
      return self + self[:other]

    def __rshift__(self, other):
      return self[-other:] + self[:-other]

第二段代码:
class Nstr:
    def __init__(self, arg=''):
      if isinstance(arg, str):
            self.total = 0
            for each in arg:
                self.total += ord(each)
      else:
            print("参数错误!")

    def __add__(self, other):
      return self.total + other.total

    def __sub__(self, other):
      return self.total - other.total

    def __mul__(self, other):
      return self.total * other.total

    def __truediv__(self, other):
      return self.total / other.total

    def __floordiv__(self, other):
      return self.total // other.total

第三段代码:
class Nstr(int):
    def __new__(cls, arg=0):
      if isinstance(arg, str):
            total = 0
            for each in arg:
                total += ord(each)
            arg = total
      return int.__new__(cls, arg)

小甲鱼的铁粉 发表于 2020-9-27 15:56:20

可以减少代码量

zltzlt 发表于 2020-9-27 18:45:27

继不继承看具体需求

linke.zhanghu 发表于 2020-9-27 22:38:09

是否继承一个类主要看你的需求来决定。
如果说你写了一个类,里面有一些功能是别的类已经有的,他们的实现思路和实现过程都符合你的要求,这时候最省事的办法就只有两个。一个是直接把你需要的源代码复制过来,直接用。另一个就是用类的继承。把别的类的方法继承过来,你就可以直接用了。第一个方法的缺点是特别low,会有代码冗余的问题。第二个就省事多了。
另外就是子类可以继承多个父类,也就意味着一个子类可以用好几个父类的方法,这样除了节省代码以外,还能进行方法的组合产生新的方法。大大节省开发时间。

happy含笑 发表于 2020-9-28 06:54:44

月照梨花 发表于 2020-9-28 18:11:04

本帖最后由 月照梨花 于 2020-9-28 18:21 编辑

class Nstr(str):
    def __sub__(self, other):
      return self.replace(other, '')
如上这段代码 继承的str时 实参就必须是字符串? 继承int时实参就必须是整型? 那如果我想两者都能输入呢 可以的吗?

还有__add__这类的运算魔法方法,只能在继承str或int这类时才能调用?
页: [1]
查看完整版本: 关于类为什么要继承?