为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Python 修饰类,该类打印修饰类的 int 变量

使用 Python 修饰类,该类打印修饰类的 int 变量

千巷猫影 2022-09-20 10:08:42
我正在学习一门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()


查看完整回答
反对 回复 2022-09-20
  • 1 回答
  • 0 关注
  • 73 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信