[英]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.