0. 介绍:
__getattr__,__setattr__,前者点获取值会自动触发,后者点设置值会自动触发
__getitem__,__setitem__,前者[ ]取值会自动触发,后者[ ] 设置值会自动触发
一. __getitem__,__setitem__,使用详情
1. 我们都知道,对象支持句点符操作,但不支持中括号操作,下面我们通过重写上述魔术方法,来实现中括号操作
2. 代码示例
a. 首先不重写,报错
class A:
def __init__(self, name):
self.name = name
a = A(name='xx')
a['name'] = 'dbj'
b. 重写
class A:
def __init__(self, name):
self.name = name
def __getitem__(self, item):
return getattr(self, item)
def __setitem__(self, key, value):
setattr(self, key, value)
a = A(name='xx')
a['name'] = 'dbj'
print(a['name'])
二. __getattr__,__setattr__,使用详情
1. 我们都知道,对象支持中括号操作,但不支持句点符操作,下面我们通过重写上述魔术方法,来实现中括号操作
2. 代码示例
a. 首先不重写,报错
class MyDict(dict):
pass
my_dict = MyDict()
my_dict.name
b. 重写
class MyDict(dict):
def __getattr__(self, item):
return self[item]
def __setattr__(self, key, value):
self[key] = value
my_dict = MyDict()
my_dict.name = 'dbj'
print(my_dict.name)