python全栈--反射

什么是反射?

用字符串数据类型的变量名来访问这个变量的值

反射方法:一共四个

  1. getattr 获取指定字符串名称的对象属性
  2. hasattr 判断对象是否有对应的对象(字符串)
  3. setattr 为对象设置一个对象
  4. delattr 删除指定属性

反射主要用在哪里?

  • 对象
  • 模块
  • 反射自己模块中的内容
    为什么有反射这个概念?

已知有三个函数fun1, fun2, fun3这三个函数,如果我们想调用其中某个函数的时候,我们就只有在代码中写好,比如我写了一个这样的代码来实现这个功能:

s.py

def func1():
	return "func1"
def func2():
	return "func2"
def func3():
	return "func3"

test.py

import s
call_str = input("input which function you want to call:")
if call_str == 'func1':
	print(s.func1())
elif call_str == 'func2':
	print(s.func2())
elif call_str == 'func3':
	print(s.func3())
else:
	print("404 NOT Found"

是想一下,如果s模块里有成千上百个函数供我们调用,那我们需要在test.py里写入成千上百个判断语句。这样太麻烦。
这时就引入了反射机制。

添加反射机制:

import s
call_str = input("input which function you want to call:")
"""
if call_str == 'func1':
	print(s.func1())
elif call_str == 'func2':
	print(s.func2())
elif call_str == 'func3':
	print(s.func3())
else:
	print("404 NOT Found")
"""	
obj = getattr(s,call_str)
print(obj())

运行后我们输入 fun1, fun2, fun3都没有问题,但是当我们乱输入一个字符串的时候getattr内置函数就报如下的错误:
在这里插入图片描述
这个时候就可以使用hasattr这个内置函数了:

import s
call_str = input("input which function you want to call:")
"""
if call_str == 'func1':
	print(s.func1())
elif call_str == 'func2':
	print(s.func2())
elif call_str == 'func3':
	print(s.func3())
else:
	print("404 NOT Found")
"""	
if hasattr(s,call_str): #判断在s中是否存在函数call_str
	obj = getattr(s,call_str)
	print(obj())
else:
	print("404 NOT Found")

反射用在类:

class Student:
	#ROLE是一个属性
	ROLE = 'User1'
	@classmethod	
	def check_course(self):
		print("查看课程")
	@staticmethod
	def login():
		print("登录")
#查看属性
print(Student.ROLE)
#反射查看属性,‘ROLE’,引号引着是一个字符串,也就是用字符串‘ROLE‘
#去反射Student类中的属性ROLE	
print(getattr(Student,'ROLE'))
#反射调用方法
getattr(Student,'check_course')()
#反射调用静态方法
getattr(Student,'login')()

反射用在对象:

class A:
	def __init__(self,name):
		self.name = name
	def func(self):
		print("in func")
#实例化对象,并给name赋值
a = A('rain')
#查看name属性
print(getattr(a,'name'))
#对象调用方法
getattr(a,'func')()

反射用在模块:

import os
#rename('原名','要改成的名')
os.rename('__init__.py','init')
getattr(os,'rename')('init','__init__.py')

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: lnh-课件代码python全栈3期是指由某个机构或教育平台提供的关于Python全栈开发的第三期课程。在该课程中,学员将学习和掌握Python编程语言及其相关的全栈开发技术。 首先,在课程开始时,学员将学习Python编程的基础知识,包括语法、数据类型、变量、控制流等等。学员将通过理论讲解和实践编程练习,逐步掌握Python的基本概念和编程技巧。 接着,课程将引导学员学习Python的Web开发框架,如Django等。学员将学会使用这些框架搭建和开发功能强大的Web应用程序,并了解前后端的交互原理。通过项目实践,学员将学会如何设计数据库、处理用户输入、处理表单和实现用户认证等等。 除了Web开发,课程还会涉及其他Python相关的技术,如爬虫、数据处理、数据可视化、机器学习等等。学员将学习如何使用Python进行数据抓取和处理,并将学到的知识应用于实际项目中。 在课程的最后阶段,学员将有机会进行一个完整的项目实践,将之前学到的知识应用到一个真实的项目中。这个项目将涵盖从需求分析、系统设计、开发、测试到部署等全过程,帮助学员加深对Python全栈开发的理解和实践能力。 总而言之,lnh-课件代码python全栈3期是一门旨在帮助学员全面掌握Python全栈开发技术的课程。通过系统的学习和实践,学员将能够独立完成一个完整的Python全栈项目,并具备进一步深入学习和实践的基础。 ### 回答2: lnh-课件代码是Python全栈3期课程的代码库。在这个代码库中,我们可以找到与课程相关的所有代码示例和案例。 这个代码库是为了帮助学员更好地学习和理解课程内容而创建的。在Python全栈3期课程中,我们将学习如何利用Python语言来构建全栈应用程序,涵盖了从前端开发到后端开发的所有关键知识点。 在lnh-课件代码中,我们可以找到各种不同的文件和文件夹。这些文件和文件夹包括课程中所涵盖的各个主题和模块,例如HTML、CSS、JavaScript、Flask、Django等。每个文件和文件夹都包含了与该主题相关的代码示例和案例。 通过查看lnh-课件代码,学员可以更好地理解课程中所讲述的理论知识,并且能够将其应用于实际的项目中。这样,学员可以更好地掌握Python全栈开发的技能,提升自己在职业生涯中的竞争力。 总而言之,lnh-课件代码是Python全栈3期课程的代码库,包含了与课程内容相关的所有代码示例和案例。通过使用这个代码库,学员可以更好地学习和理解课程内容,并应用于实际项目中。 ### 回答3: lnh-课件代码python全栈3期是一门针对Python全栈开发的课程。这门课程旨在教授学员使用Python语言进行全栈开发,涵盖从前端到后端的所有内容。 在这门课程中,学员将学习使用Python编写前端代码,包括HTML、CSS和JavaScript,掌握前端开发的基本概念和技术。 同时,学员还将学习使用Python开发后端代码,包括使用框架如Django或Flask进行Web应用程序的开发,以及数据库的设计和管理。 此外,该课程还将重点介绍如何进行系统部署、性能优化以及安全防护等方面的知识,以帮助学员全面打造一个完整的Python全栈应用程序。 该课程将提供大量的实践项目,让学员能够通过实际操作来巩固自己所学的知识。此外,还会有针对性的练习和作业,以确保学员能够灵活应用所学的知识。 授课老师将是经验丰富的专业人士,在教学过程中将提供详细的实例和案例,帮助学员更好地理解和应用所学的内容。 总之,lnh-课件代码python全栈3期是一门集中教授Python全栈开发技术的课程,通过系统地学习,学员能够掌握使用Python开发全栈应用程序的能力,并在实践中不断提升自己的技术水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值