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

 

而第二种可以访问所有带下划线的属性