首页 新闻 会员 周边 捐助

下面代码用弱引用,避免出现内存泄漏什么意思?

0
[已关闭问题] 关闭于 2025-08-26 15:29
from weakref import WeakKeyDictionary

class Score():
    """ score should in [0,100] """

    def __init__(self):
        self.score = WeakKeyDictionary()
        #self.score = {}

    def __get__(self, instance, owner):
        return self.score[instance]

    def __set__(self, instance, value):
        if 0 <= value <= 100:
            self.score[instance] = value
        else:
            raise ValueError("score not in [0,100]")


class Student():
    # 托管属性定义在类级别上
    score1 = Score()
    score2 = Score()
    score3 = Score()

    def __init__(self, stuid, name, score1, score2, score3):
        self.stuid = stuid
        self.name = name
        self.score1 = score1
        self.score2 = score2
        self.score3 = score3

    def returnMe(self):
        return "%s, %s, %i, %i, %i" % (
            self.stuid,
            self.name,
            self.score1,
            self.score2,
            self.score3)


stu = Student("20101120", "malong", 67, 77, 88)
print(stu.returnMe())
stu.score1 = -23 

上面使用了弱引用的字典,因为每个属性只在描述符对象中才会被用上,为了保证Student对象被销毁的时候能释放这些资源,所以采用弱引用,避免出现内存泄漏

_java_python的主页 _java_python | 小虾三级 | 园豆:996
提问于:2025-08-26 10:30
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册