1.getattr() 是python 中的一个内置函数,用来获取对象中的属性值
2.getattr(obj,name[,default]) 其中obj为对象名,name是对象中的属性,必须为字符串。
3.两种表达式的区别
第一种,getattr(obj,"_attr")
第二种,getattr(obj,"_" + attr)
第一种只能访问_attr属性,
class Student: # 定义类 def __init__(self,name,identity,age): self._name = name self._identity = identity self.age = age def __getitem__(self,item): if isinstance(item,str): return getattr(self,"_item")
# 实例化一个学生类对象 st = Student("Apollo", 15618661616, 28)
''' 执行: print(st["age"]) 打印: Traceback (most recent call last): File "E:/Python学习/xfz/xfzapp/tests.py", line 13, in <module> print(st["age"]) File "E:/Python学习/xfz/xfzapp/tests.py", line 9, in __getitem__ return getattr(self, "_item") AttributeError: 'Student' object has no attribute '_item' '''
''' print(st["name"]) Traceback (most recent call last): File "E:/Python学习/xfz/xfzapp/tests.py", line 26, in <module> print(st["name"]) File "E:/Python学习/xfz/xfzapp/tests.py", line 9, in __getitem__ return getattr(self, "_item") AttributeError: 'Student' object has no attribute '_item' '''
第二种可以访问所有带下划线的属性
''' 执行: print(st["age"]) 打印: Traceback (most recent call last): File "E:/Python学习/xfz/xfzapp/tests.py", line 13, in <module> print(st["age"]) File "E:/Python学习/xfz/xfzapp/tests.py", line 9, in __getitem__ return getattr(self,"_" + item) AttributeError: 'Student' object has no attribute '_age' '''
print(st["name"]) # Apollo