python面向对象反射

2023-12-21 22:51:49

就是通过字符串的形式操作对象相关属性

反射基本语法?

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')

文章来源:https://blog.csdn.net/flclyz/article/details/135141066
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。