我正在学习一门python课程,其中一个练习是为这个类创建一个装饰器,返回每个int变量。@decoratoreDiClasseclass MyClass: def __init__(self): self.a = 1 self.b = 2 self.c = 'w'`我的问题是列表总是空的,因为dict不返回init内部的变量,我该如何解决我的问题?我在下面写了我的装饰师def decoratoreDiClasse(cls):def elencaVariabili(): lista = [] print(cls) lista1 = cls.__dict__ print(lista1) for ab in lista1: if isinstance(ab, int): lista.append(ab) return listasetattr(cls, "elencaVariabili", elencaVariabili())return cls这是应该打印变量的主要部分,由于老师的要求,我无法更改除“装饰DiClasse”之外的任何内容。 for v in x.elencaVariabili(): print(v, end=' ')
1 回答
慕娘9325324
TA贡献1783条经验 获得超4个赞
看起来你应该让你的装饰器向类中添加一个方法,该方法在调用它的实例上打印出整数值属性。这不是您当前尝试执行的操作,因为您的代码会尝试在以后的类上查找变量,而不是在以后的实例上查找变量。
把你正在做的事情想象成一种方法,它会简单得多:
def decoratoreDiClasse(cls):
def elencaVariabili(self): # this is a method, so it should take self!
lista = [value for value in self.__dict__.values() # loop over our attribute values
if isinstance(value, int)] # and pick out the integers!
return lista
setattr(cls, "elencaVariabili", elencaVariabili) # don't call the method here
return cls
从代码中并不完全清楚是应该返回整数变量的名称还是仅返回值本身。我只使用了值,但是如果您需要变量名称,则可能需要更改列表理解以迭代实例的字典,而不仅仅是 .items()values()
添加回答
举报
0/150
提交
取消