就是通过字符串的形式操作对象相关属性
反射基本语法
from django.test import TestCase
# Create your tests here.
class Students:
def __init__(self, name, gender):
self.name = name
self.gender = gender
def 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')