Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python装饰类,该Python打印装饰类的int变量_Python_Python Decorators - Fatal编程技术网

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

用Python装饰类,该Python打印装饰类的int变量,python,python-decorators,Python,Python Decorators,我正在学习python课程,其中一个练习是为这个类创建一个decorator,它返回每个int变量` @decoratoreDiClasse class MyClass: def __init__(self): self.a = 1 self.b = 2 self.c = 'w'` 我的问题是列表总是空的,因为dict不返回init中的变量,我如何解决我的问题? 我已经把我的装饰师写在下面了 def decoratoreDiClasse(

我正在学习python课程,其中一个练习是为这个类创建一个decorator,它返回每个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
这是main中应该打印变量的部分,由于老师的要求,除了“decorediclass”之外,我不能更改任何内容

    for v in x.elencaVariabili():
    print(v, end=' ')

看起来您应该让装饰器向类中添加一个方法,该方法在调用它的实例上打印出整数值属性。这不是您当前试图做的,因为您的代码尝试在类上而不是稍后在实例上查找变量

将您所做的作为一种方法,它会简单得多:

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

看起来您应该让装饰器向类中添加一个方法,该方法在调用它的实例上打印出整数值属性。这不是您当前试图做的,因为您的代码尝试在类上而不是稍后在实例上查找变量

将您所做的作为一种方法,它会简单得多:

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

提示:
lista1=cls.\uu dict\uu
将没有任何实例属性,你关心的是什么…你的提示是关于“cls”还是dict?提示是关于使用
cls
属性。类名称空间不包含实例属性,它们包含类属性。您需要一个实例作为实例属性。提示:
lista1=cls.\uuu dict\uuu
将没有任何实例属性,这是您关心的…您的提示是关于“cls”还是dict?提示是关于使用
cls
\uu dict\uu
属性。类名称空间不包含实例属性,它们包含类属性。对于实例属性,您需要一个实例。