如何实现一个类,该类在每次更改其属性时更改其“last_edited”变量?

2024-05-22 20:48:58 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我有一个类:

import datetime

class Obj:
    
    def __init__(self, attribute_1):
        self.attribute_1 = attribute_1
        self.last_edited = None

我希望它能够做到这一点:

# Creating object
obj1 = Obj("a") 
obj1.attribute_1 = "b"  # obj1.last_edited should have changed to datetime.datetime.now()

如果要直接更改obj1的“属性_1”(无任何设置器),我不确定如何实现对obj1的“上次编辑”属性的更改

提前谢谢


Tags: importselfcreatingnoneobjdatetime属性object
1条回答
网友
1楼 · 发布于 2024-05-22 20:48:58

所有Python对象都有一个名为__setattr__的内置方法,每当类中的字段发生更改时都会调用该方法。默认情况下,此方法更新类字典中的值(存储在内部以表示类实例的状态)。您可以通过定义自定义__setattr__方法来重写此行为。对于您的用例,函数可能如下所示:

class SomeObject:
    def __init__(self, attr):
        self.attr = attr

    def __setattr__(self, name, value):
        super().__setattr__("last_edited", time.time())
        super().__setattr__(name, value)

注意,我们需要使用super调用来避免递归(使用基类object__setattr__方法)

相关问题 更多 >

    热门问题