繁体   English   中英

类装饰器实例 int 变量?

[英]Class decorator instance int variables?

def classDecorator(aClass):
    def variables(self):
        for variable in self.__dict__:
            if isinstance(variable, int):
                yield variable
    setattr(aClass, 'variables', variables)
    return aClass

@classDecorator
class myClass:
    pass

if __name__ == '__main__':
    x = myClass()
    x.a = 2
    print(str(x.variables()))

这个装饰器应该向类添加一个方法,该方法返回它被调用的实例的 int 类型的实例变量的迭代器,但是如果我运行该程序,它会打印:

<generator object classDecorator.<locals>.variables at 0x011385D8>

为什么?

for variable in self.__dict__循环将为您提供变量的名称(作为字符串序列)。 要获取值,可以使用这个:

for var, value in self.__dict__.items():
    if isinstance(value, int):
        yield var

此外,使用list()收集迭代器产生的值,如注释所示:

print(list(x.variables()))

暂无
暂无

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

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