简体   繁体   English

在Python 3中的类方法中实现宏

[英]Implementing macros in class methods in Python 3

I have the following: 我有以下几点:

class ComplicatedClass(object):
    def _init__(self):
        self.useful_member = ...

    def method(self):
        M = self.useful_member
        ...

    def method2(self):
        M = self.useful_member
        ...

    def method3(self):
        M = self.useful_member
        ...

I am using the useful member a lot in various methods, so instead of writing the long and cumbersome self.useful_member each time, I am assigning it to the short variable name M . 我在各种方法中大量使用了有用的成员,因此,不是每次都写冗长而麻烦的self.useful_member ,而是将其分配给短变量名M

Is there a way to avoid re-doing M = self.useful_member for each method? 有没有一种方法可以避免为每个方法重新执行M = self.useful_member

I believe you are looking for something like 我相信您正在寻找类似的东西

def quick_assignment(varName, varValue):
    def decorator(func):
        def wrapped_method(self, *args, **kwargs):
            func.__globals__[varName] = eval(varValue)
            return func(self, *args, **kwargs)
        return wrapped_method
    return decorator

def for_all_methods(decorator):
    def decorate(cls):
        for attr in cls.__dict__: # there's propably a better way to do this
            if callable(getattr(cls, attr)) and attr[:2] != '__':
                setattr(cls, attr, decorator(getattr(cls, attr)))
        return cls
    return decorate

@for_all_methods(quick_assignment('M', 'self.useful_member'))
class ComplicatedClass(object):
    def __init__(self):
      self.useful_member = 6

    def method(self):
        print(M) # Prints 6

However, as Aran-Fey suggests below, this is not ideal, but it answers your question. 但是,正如阿兰·费伊(Aran-Fey)所建议的那样,这并不理想,但可以回答您的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM