更改變量屬性,相應地計算其他屬性

我試圖找到一種方法,在類內的一個屬性更改后,不調用類外的函數,就可以讓所有屬性都進行求值。

class Students:
        def __init__(self, name, mylist):
            self.name = name
            self.subjects = mylist
            self.credits =  len(self.subjects) * 2
            
        def credits_calc(self):
            self.credits = len(self.subjects) * 2
            return self.credits

john = Students("John", ["Maths", "English"])
print(john.subjects)
print(john.credits)

john.subjects.append("History")
print(john.subjects) # --> subjects attribute updated.
print(john.credits)  # --> obviously not updated. Still returns initial value.

我必須調用類外的函數來更新其他屬性

john.credits_calc() # I know I can take the returned value.
print(john.credits) # --> updated after calling the function.

因此,我的問題是,如果一個屬性發生了更改,那么如何讓其他屬性進行計算,而無需稍后手動調用該函數。

? 最佳回答:

你要找的是property裝飾師。您可以在此基礎上添加其他方法,特別是此屬性的fset和fdel邏輯,下面的代碼僅定義fget行為。

class Students:
    def __init__(self, name, mylist):
        self.name = name
        self.subjects = mylist

    @property
    def credits(self):
        return len(self.subjects) * 2


john = Students("John", ["Maths", "English"])
print(john.credits)  # 4

john.subjects.append("History")
print(john.credits)  # 6
主站蜘蛛池模板: 伊人久久精品无码麻豆一区| 日本视频一区二区三区| 国产一区二区影院| 久久久久久综合一区中文字幕| 一区二区无码免费视频网站| 国产精品va无码一区二区| 亚洲av无码天堂一区二区三区 | 立川理惠在线播放一区| 日韩中文字幕一区| 久久se精品动漫一区二区三区| 一区二区三区高清视频在线观看| 无码中文人妻在线一区二区三区| 亚洲综合无码一区二区| 久久综合精品不卡一区二区| 中文字幕久久久久一区| 日韩有码一区二区| 精品视频一区在线观看| 国产精品久久亚洲一区二区| 日韩久久精品一区二区三区| 大帝AV在线一区二区三区| 亚洲一区二区观看播放| 亚洲AV无码一区二区三区电影| 精品国产一区二区三区香蕉 | 亚洲AV无码片一区二区三区| 日韩一区二区三区无码影院| 久久精品国产第一区二区三区| 久久一区二区明星换脸| 久久久久人妻一区精品性色av| 无码人妻精品一区二区三区在线| 无码少妇一区二区三区浪潮AV| 亚洲国产精品一区二区成人片国内 | 国产伦精品一区二区三区免费下载| 亚洲另类无码一区二区三区| 另类ts人妖一区二区三区| 国产av一区二区精品久久凹凸| jazzjazz国产精品一区二区| 色妞AV永久一区二区国产AV| 久久国产精品亚洲一区二区| 在线播放偷拍一区精品| 国产在线精品一区二区在线看| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 |