就是通过字符串的形式操作对象相关属性
反射基本语法
from django.test import TestCase# Create your tests here.
class Students:def __init__(self, name, gender):self.name = nameself.gender = genderdef play(self, game, novel):print(game, novel)s = Students('lyz', 'male')
print(hasattr(s, 'name')) # True
print(hasattr(s, 'play')) # True
print(getattr(s, 'name')) # lyz
g = getattr(s, 'play')
g('lol', '斗破')
再写一个简单的网页登录示例
class WebSite:def register(self):print('这是注册页面')def login(self):print('这是登录页面')def about(self):print('关于...')while True:choose=input('请输入要进入的页面:')if choose=='register':page=WebSite()page.register()elif choose=='login':page=WebSite()page.login()else:page=WebSite()page.about()
你会发现如果类中写上百种方法,那么if也要写上百种,这种代码很明显不行,这时候就可以使用反射。
page = WebSite()
while True:choose = input('请输入要进入的页面:')# 判断类实例化对象中是否有这个方法if hasattr(page, choose):# 通过字符串调用类的方法g = getattr(page, choose)g()else:print('404')