如何在Python中实现类似C++的流运算符<<和>>

引言

大家好,又是我,莉莉丝。继上次实现了C语言的自增运算后,我又继续苦心研(mo)究(yu),发现,在Python魔术方法中还存在两个运算符。

也就是我们今天的主角,流运算符。当然,python自己肯定是没有流运算符的,不过你看这个流运算符长得像什么?嗯,没错,就是我们的位运算符号中的左移和右移。

然后我们就可以开始我们的操作了。

流输入 <<
class Cout:
    def __lshift__(self, other):
        print(other, end="")
        return self
endl = "\n"
cout = Cout()

cout << "Hello World" << endl

首先,我们定义一个标准输出,Cout,里面包含了左位移(输出流)运算。其中print加了end参数保证和C语言的cout一样不默认换行。最后返回它本身就可以保证我们可以连着用流运算。同时笔者还定义了一个endl,也就是换行,显得更真实,最后试用运行,输出,Hello World,完美。

流输入 >>
class Var:
    def __init__(self, val):
        self.val = val
    def __str__(self):
        return str(self.val)
a = Var(0)
class Cin:
    def __rshift__(self, other):
        other.val = input()
        return self
cin = Cin()

cin >> a
cout << a << endl

接着,对于标准输入的定义,因为Python没有指针这种东西,咱也不能直接获取地址进行输入,所以,我们需要建一个变量类,让它作为一个类似指针的东西。同时为了可以输出它,我们也别忘了要写__str__。

有了变量类之后,接下来就可以定义一个标准输入了。也不是很难,就和之前一样就好。变量对象的val改成输入的值。运行,输出,完美。

聪明读者到这里可能想到流输入运算符的另一个特性,那就是多变量输入,实际上这个多变量输入也被实现了。毕竟每一个流运算符的返回值,都是标准输入,自然也就可以分别调用input()了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值