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

我正在学习一门python课程,其中一个练习是为这个类创建一个装饰器,返回每个int变量。


@decoratoreDiClasse

class 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 lista


setattr(cls, "elencaVariabili", elencaVariabili())

return cls

这是应该打印变量的主要部分,由于老师的要求,我无法更改除“装饰DiClasse”之外的任何内容。


    for v in x.elencaVariabili():

    print(v, end=' ')


千巷猫影
浏览 74回答 1
1回答

慕娘9325324

看起来你应该让你的装饰器向类中添加一个方法,该方法在调用它的实例上打印出整数值属性。这不是您当前尝试执行的操作,因为您的代码会尝试在以后的类上查找变量,而不是在以后的实例上查找变量。把你正在做的事情想象成一种方法,它会简单得多: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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python