【魔术方法】实现C++中的cout

        首先我们要观察C++中的cout,下面语句会在控制台打印出"haha我是C++"并换行

cout << 'haha' << '我是C++' << endl;

        我们首先需要观察cout语句的形式,cout作为起始,要传入输出流的内容用<<连接在cout的右边,并且可以实现连续的输出,最后的endl可以实现换行

        首先我们需要思考我们要怎么做,很显然,<<是运算符,叫做左移运算符,因此我们完全可以创建一个重载了<<运算符的类来实现我们要的特性

class Cout:

    def __lshift__(self, other):
        print(other, end='')


cout = Cout()
cout << 'haha'

        至此,已经可以打印出haha了,注意把print的end设置为空字符,因为print默认换行,这是和cout不一样的行为,接下来我们要思考如何连串的打印呢?

        首先我们要清楚一个表达式在执行完之后会发生什么,在python中,表达式执行完后会返回一个值,我们现在lshift没有return,当然在python中就意味着返回了None,None很显然不会执行<<运算符,其实到这里读者肯定能想到要怎么做了

class Cout:

    def __lshift__(self, other):
        print(other, end='')
        return self


cout = Cout()
cout << 'haha' << '我是Python'

        我们只需要在lshift中返回实例对象本身,也就是self,根据lshift的执行顺序是从左到右的特点,就可以正确打印了,endl其实没啥困难,无非是在lshift里面判断一下类型

class Cout:

    def __lshift__(self, other):
        if isinstance(other, Endl):
            print()
        else:
            print(other, end='')
        return self


class Endl:
    pass


cout = Cout()
endl = Endl()
cout << 'haha' << '我是Python' << endl

        至此,我们就实现了C++中的cout了!!!

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值