算数运算

我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常。因此,现在我们要求定义一个 Nstr 类,支持字符串的相减操作:A – B,从 A 中去除所有 B 的子字符串

示例如下:

>>> a = Nstr('I love FishC.com!iiiiiiii')

>>> b = Nstr('i')

>>> a - b

'I love FshC.com!'

实现:

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

定义一个类 Nstr,当该类的实例对象间发生的加、减、乘、除运算时,将该对象的所有字符串的 ASCII 码之和进行计算

示例如下:

>>> a = Nstr('FishC')

>>> b = Nstr('love')

>>> a + b

899

总共有两种实现方法:

第一种

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

这里告诉我们self的确只是一个表明身份的符号。

第二种:

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)

继承int,但是赋予int不具备的新的功能。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Einstellung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值