Python 类装饰器实例int变量?

Python 类装饰器实例int变量?,python,Python,此装饰器应向类中添加一个方法,该方法返回调用它的实例的int类型实例变量的迭代器,但如果我运行该程序,它将打印以下内容: def classDecorator(aClass): def variables(self): for variable in self.__dict__: if isinstance(variable, int): yield variable setattr(aClass, 'var

此装饰器应向类中添加一个方法,该方法返回调用它的实例的int类型实例变量的迭代器,但如果我运行该程序,它将打印以下内容:

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()))


为什么?

self中变量的循环
。\uuuu dict\uuuu
将为您提供变量的名称(作为字符串序列)。要获取值,可以使用以下命令:

<generator object classDecorator.<locals>.variables at 0x011385D8>
此外,使用
list()
收集迭代器生成的值,如注释所示:

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

这就是迭代器。必须对其进行迭代才能获得实际的属性名称。尝试
print(list(x.elencaVariabili())
print(str(x.elencaVariabili()。\uuuu next\uuuu())
将打印第一个int,以打印在函数上迭代所需的所有int,例如,对于x.elencaVariabili()中的某些int,这是否回答了您的问题@chepner它打印一个空列表[]@rotemtal它给我一个StopIteration错误也可以使用一个
的yield from
:)
的yield from(var代表var,value在self中)。items()如果是instance(value,int))
让我们保持它的可理解性,@flakes;-)这对我来说是一个双关语吗?哈哈,不,那是个意外。。。好样的!:-D
print(list(x.variables()))