python面向对象反射

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

反射基本语法 

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

相关推荐

  1. python面向对象反射

    2023-12-22 01:46:04       72 阅读
  2. Python基础20 面向对象(3)多态、封装、反射

    2023-12-22 01:46:04       51 阅读
  3. Python面向对象编程

    2023-12-22 01:46:04       62 阅读
  4. Python 面向对象(3)

    2023-12-22 01:46:04       82 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-22 01:46:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-22 01:46:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-22 01:46:04       82 阅读
  4. Python语言-面向对象

    2023-12-22 01:46:04       91 阅读

热门阅读

  1. C++ 删除链表中重复的节点 *

    2023-12-22 01:46:04       53 阅读
  2. 进程同步与死锁

    2023-12-22 01:46:04       39 阅读
  3. 力扣labuladong一刷day42天图的遍历

    2023-12-22 01:46:04       52 阅读
  4. KafKa手动提交问题描述

    2023-12-22 01:46:04       55 阅读
  5. 蓝桥杯-每日刷题-023

    2023-12-22 01:46:04       51 阅读
  6. Linux命令行控制小米电源开关

    2023-12-22 01:46:04       48 阅读
  7. Solidity-5-表达式和控制结构

    2023-12-22 01:46:04       41 阅读
  8. PyQt中的冒号(:)

    2023-12-22 01:46:04       54 阅读
  9. RHCE8 资料整理(十二)

    2023-12-22 01:46:04       62 阅读
  10. Issues about Ubuntu & ROS

    2023-12-22 01:46:04       49 阅读