Python 3:如何在类作用域内为类方法添加专属缩写别名?
如何在Python类内部用缩写调用实例方法且不污染全局作用域
你需要在Aircraft类的方法中用a()替代self._prepare_engines(),同时满足仅类内部可用、无需重复定义缩写两个要求,以下是可行的解决方案:
方案1:单个方法注入缩写
定义一个装饰器,给需要使用缩写的方法局部注入a变量,绑定到self._prepare_engines:
def inject_a(func): def wrapper(self, *args, **kwargs): # 将a绑定到当前实例的_prepare_engines方法 a = self._prepare_engines return func(self, *args, **kwargs) return wrapper class Aircraft(): @inject_a def takeoff(self): a() # 等价于调用self._prepare_engines() def _prepare_engines(self): print("引擎已启动准备")
方案2:批量给类中所有方法注入缩写
如果类中多个方法都需要使用缩写,可以用类装饰器自动遍历并装饰所有实例方法:
def inject_a(func): def wrapper(self, *args, **kwargs): a = self._prepare_engines return func(self, *args, **kwargs) return wrapper def inject_a_to_all_methods(cls): # 遍历类属性,筛选所有可调用的实例方法 for attr_name, attr_value in list(cls.__dict__.items()): if callable(attr_value): setattr(cls, attr_name, inject_a(attr_value)) return cls @inject_a_to_all_methods class Aircraft(): def takeoff(self): a() def taxi(self): a() # 所有方法都能直接调用a() def _prepare_engines(self): print("引擎已启动准备")
方案符合要求说明
- 不污染全局作用域:
a是装饰器注入到方法内部的局部变量,仅在被装饰的方法内可见,不会影响类外部的全局环境。 - 无需重复定义:只需要编写一次装饰器逻辑,通过装饰器标记目标方法(或整个类)即可完成缩写绑定,不用在每个方法里重复写
a = self._prepare_engines。
内容的提问来源于stack exchange,提问作者Waschbaer
相关产品推荐
相关产品推荐

