首页 > 解决方案 > 每次与 Class 对象交互时,如何更新 Class 对象的属性?

问题描述

例如,我有一堂课:

from datetime import datetime

class Book:
    def __init__(self, contents):
        self.last_accessed = datetime.now()
        self.content = contents
    
    def add_content(self, addition):
        self.content += str(addition)
        
    def replace_content(self, replacement):
        self.content = replacement
        
    def read_content(self):
        return self.content

我希望这个类能够记录最后一次访问 Book 的时间,例如:

Mybook = Book("Hello")  # Last accessed = datetime.now()
Mybook.add_content(" World")  # Last accessed = datetime.now(), which should be later than the previous datetime.now()
Mybook.read_content() # Last accessed should be later than when I added " World" to Mybook.content

我怎样才能使 Mybook.last_accessed 每次更改 Mybook 时都会更改?

提前致谢。

标签: pythonpython-3.x

解决方案


from datetime import datetime

class Book:
    def __init__(self, contents):
        self.__update_datetime()
        self.content = contents

    def __update_datetime(self):
        self.last_accessed = datetime.now()

    def add_content(self, addition):
        self.content += str(addition)
        self.__update_datetime()
    
    def replace_content(self, replacement):
        self.content = replacement
        self.__update_datetime()

    
    def read_content(self):
        self.__update_datetime()
        return self.content


Mybook = Book("Hello")
print(Mybook.last_accessed) # 2020-07-03 10:17:25.596847
Mybook.add_content(" World")
print(Mybook.last_accessed) # 2020-07-03 10:17:25.596905
Mybook.read_content()
print(Mybook.last_accessed) # 2020-07-03 10:17:25.596917

推荐阅读