这是我第一次尝试装饰器:
编辑第二尝试:我添加了处理变量的默认值和检查有效的关键字。
[编辑3:添加的默认检查不是“无”。
def instanceVariables(func): def returnFunc(*args, **kwargs): selfVar = args[0] argSpec = inspect.getargspec(func) argumentNames = argSpec[0][1:] defaults = argSpec[3] if defaults is not None: defaultArgDict = dict(zip(reversed(argumentNames), reversed(defaults))) selfVar.__dict__.update(defaultArgDict) argDict = dict(zip(argumentNames, args[1:])) selfVar.__dict__.update(argDict) validKeywords = set(kwargs) & set(argumentNames) kwargDict = {k: kwargs[k] for k in validKeywords} selfVar.__dict__.update(kwargDict) func(*args, **kwargs) return returnFunc这是一个例子:
class Test(): @instanceVariables def __init__(self, x, y=100, z=200): pass def printStr(self): print(self.x, self.y, self.z)a = Test(1, z=2)a.printStr()>>> 1 100 2



