亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 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 關注
  • 84 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號