- 在python 的数据结构中使用. 方式获取属性值,其实是底层实现了__getattribute__ 魔法方法。
- 例如代码如下:
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def __getattribute__(self, item):
return "{} good luck".format(item)
if __name__ == '__main__':
p=Person("tom",18)
p.age # 获取属性的同时就会触发 __getattribute__ 方法
终端打印结果
- 还有就是字典的取值方式 经过 [] 来取值,其实他是实现了__getitem__ 魔法方法
- 你可以自定义一个类,重写__getitem__ 这个方法来实现 属性也可以这么取值。
- 代码如下
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def __missing__(self, key):
raise AttributeError(key)
# def __getitem__(self, key):
# try:
# return eval("self.{}".format(key)) # 不推荐这么写,eval 注入
# except AttributeError:
# return self.__missing__(key)
def __getitem__(self, key):
try:
return self.__getattribute__(key)
except AttributeError:
return self.__missing__(key)
if __name__ == '__main__':
p=Person("tom",18)
print(p["name"])
print(p["age"])
print(p.age)
- 终端打印结果