1. 程式人生 > 其它 >每日進步一點點:__or__與__ror__等魔法函式的學習

每日進步一點點:__or__與__ror__等魔法函式的學習

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# DevVersion: Python3.6.8
# Date: 2021-11-16 22:39
# PyCharm|test
from functools import partial


# 功能實現
class Change:
    def __init__(self, func):
        self.func = func

    def __or__(self, other):
        return self.func(other)

    def __ror__(self, other):
        self.func = partial(self.func, other)
        return self


到 = Change(range)
for i in 2 | 到 | 10:
    print(i)

# TODO 知識點
"""
|到| 代表三部分,左邊的"|",中間的"到", 右邊的"|"
"""


# 魔法函式 __or__ 定義例項的右側遇到|時的具體行為
# 魔法函式 __ror__ 定義當例項左側遇到|時的具體行為

# 魔法函式 __add__ 定義例項的右側遇到+時的具體行為
# 魔法函式 __radd__ 定義當例項左側遇到+時的具體行為


# 魔法函式 __xor__ 定義例項的右側遇到^時的具體行為
# 魔法函式 __rxor__ 定義當例項左側遇到^時的具體行為

# 魔法函式 __mul__ 定義例項的右側遇到*時的具體行為
# 魔法函式 __rmul__ 定義當例項左側遇到*時的具體行為

class Test:
    def __init__(self, num):
        self.num = num

    def __or__(self, other):
        print(f"我右邊有一個東西,它是:{other}")

    def __ror__(self, other):
        print(f"我左邊有一個東西,它是:{other}")


x = Test(100)

x | 18000  # 我右邊有一個東西,它是:22
15000 | x  # 我左邊有一個東西,它是:33

# 同時,這個Change類,你甚至可以直接當做裝飾器來使用。任何能夠接收兩個引數的函式,都能使用這個裝飾器。
@Change
def 加(a,b):
    return a+b

print(2|加|3)  # 5
人生苦短,我用python!