python中宏定义_Python 通过装饰器控制函数定义(类以宏定义)

实现效果:@linux

def my_callback(*args, **kwargs):

print("Linux 平台函数实现 @ Linux")

return

@windows

def my_callback(*args, **kwargs):

print("Windows平台函数实现 @ Windows")

通过装饰器控制函数定义:

1) 不支持一个函数多个装饰器import sys

import platform

def _ifdef_decorator_impl(plat, func, frame):

if platform.system() == plat:

return func

elif func.__name__ in frame.f_locals:

return frame.f_locals[func.__name__]

else:

def _not_implemented(*args, **kwargs):

raise NotImplementedError(

f"Function {func.__name__} is not defined "

f"for platform {platform.system()}.")

return _not_implemented

def windows(func):

return _ifdef_decorator_impl('Windows', func, sys._getframe().f_back)

def macos(func):

return _ifdef_decorator_impl('Darwin', func, sys._getframe().f_back)

def linux(func):

return _ifdef_decorator_impl('Linux', func, sys._getframe().f_back)

@linux

def my_callback(*args, **kwargs):

print("Linux 平台函数实现 @ Linux")

@windows

def my_callback(*args, **kwargs):

print("Windows平台函数实现 @ Windows")

#执行函数

my_callback()

2)支持一个函数多个装饰器import sys

import platform

class IfDefDecoratorPlaceholder:

def __init__(self, func):

self.__name__ = func.__name__

self._func = func

def __call__(self, *args, **kwargs):

raise NotImplementedError(

f"Function {self._func.__name__} is not defined for "

f"platform {platform.system()}.")

def _ifdef_decorator_impl(plat, func, frame):

if platform.system() == plat:

if type(func) == IfDefDecoratorPlaceholder:

func = func._func

frame.f_locals[func.__name__] = func

return func

elif func.__name__ in frame.f_locals:

return frame.f_locals[func.__name__]

elif type(func) == IfDefDecoratorPlaceholder:

return func

else:

return IfDefDecoratorPlaceholder(func)

def linux(func):

return _ifdef_decorator_impl('Linux', func, sys._getframe().f_back)

def windows(func):

return _ifdef_decorator_impl('Windows', func, sys._getframe().f_back)

def macos(func):

return _ifdef_decorator_impl('Darwin', func, sys._getframe().f_back)

@macos

@linux

def my_callback(*args, **kwargs):

print("Linux 和 MacOS平台函数实现 ")

return

@windows

def my_callback(*args, **kwargs):

print("Windows平台函数实现 ")

#执行函数

my_callback()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值