Python面对对象类的反射机制是面向对象编程语言中比较重要的功能,可以动态获取对象信息以及动态调用对象。通过字符串形式的类名或属性来访问对应类或属性。
一、对象的反射
1. getattr 获取指定字符串名称的对象属性、方法: 当访问的属性不存在时,会报错!

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def say_hello(self):
        return (f'Hello,{self.name}')
person = Person('冯大少',18)
name = getattr(person, 'name')
print(name)
age = getattr(person, 'age')
print(age)
func = getattr(person, 'say_hello')()
print(func)
print(getattr(person, 'test'))
加第3个参数,当访问的属性不存在时,返回指定的内容

2、hasattr 判断对象是否有对应的对象属性、方法,返回 bool 值

3、setattr 为对象设置一个对象属性 : 可以通过匿名函数调用 name 属性

4. delattr 删除指定属性:

最后用一个登录验证的例子,再看看类的反射怎样实现校验:

 
 
通过 hasattr(userverify, username) 去校验 输入的内容,当输入5次都是错误,就触发结束循环前的语句。

 
 
当校验成功时,调用 login_message 方法,结束循环。
lst = []
class UserVerify:
    def __init__(self, ):
        self.username1 = '冯大少1'
        self.username2 = '冯大少2'
        self.username3 = '冯大少3'
        self.username4 = '冯大少4'
        self.username5 = '冯大少5'
    def login_message(self):
        print(f'登录成功,欢迎{self.username1}访问')
while True:
    userverify = UserVerify()
    username = input('请输入用户名')
    if hasattr(userverify, username):
        func = getattr(userverify, 'login_message')()
        break
    else:
        error_msg = '用户名不存在,请重新输入!'
        print(error_msg)
        lst.append(error_msg)
        if len(lst) >= 5:
          print('输入错误的用户名已经超过当日的上限,请申请相关解除手续')
          break
    关于类的其他高级应用,下一期
 将继续分享。



















