用__getattribute__和__setattribute__做一个简答的程序
时间: 2023-07-31 19:09:44 浏览: 133
当使用`__getattribute__`和`__setattribute__`方法时,我们可以实现一个简单的程序,用于记录对象属性的访问和设置操作。
```python
class AttributeLogger:
def __init__(self):
self.log = {} # 用于记录属性访问的日志
def __getattribute__(self, name):
value = object.__getattribute__(self, name) # 获取属性的实际值
self.log[name] = 'get' # 记录属性的访问操作
return value
def __setattribute__(self, name, value):
self.log[name] = 'set' # 记录属性的设置操作
object.__setattr__(self, name, value) # 设置属性的值
# 使用AttributeLogger类进行测试
obj = AttributeLogger()
obj.attribute1 = "Value 1"
obj.attribute2 = "Value 2"
print(obj.attribute1) # 访问属性1
print(obj.attribute2) # 访问属性2
print(obj.log) # 打印属性访问日志
```
在上面的代码中,我们创建了一个名为`AttributeLogger`的类,它重写了`__getattribute__`和`__setattribute__`方法来记录属性的访问和设置操作。在类的初始化方法中,我们定义了一个日志字典`log`,用于记录属性操作。
当我们创建`AttributeLogger`对象并设置其属性时,`__setattribute__`方法会被调用来记录设置操作,并使用`object.__setattr__(self, name, value)`来实际设置属性的值。
当我们访问对象的属性时,`__getattribute__`方法会被调用来记录访问操作,并返回属性的实际值。
最后,我们打印属性访问日志,即`log`字典,以查看属性的访问和设置操作。
希望以上示例程序能满足你的需求!如果你还有其他问题,请随时提问。
阅读全文