python之路-反射

反射

反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。

python面向对象中的反射:通过字符串的形式操作对象的相关属性和方法

python中一切事物皆对象(都可以使用反射)

操作对象:

实例化对象 类 本模块 其他模块

四个函数

hasattr 检测是否存在

getattr获取

setattr设置

delattr删除

如何使用

实例化对象

class A:
    country = '中国'
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def func(self):
        print('in A func')
obj = A('小红',18)
print(hasattr(obj,'name')) #判断是否存在,返回True 或 False
print(getattr(obj,'name')) #获取,属性会得到属性值
print(getattr(obj,'func')) #获取,方法会得到一个对象内存地址
setattr(obj,'小明',23) #新增或修改,按照参数位置进行操作
print(obj.__dict__)
delattr(obj,'name') #删除
print(obj.__dict__)

 

class A:
    country = '中国'
    def __init__(self,name,age):
        self.name = name
        self.age = age
    @classmethod
    def func(cls):
        print('这个是类方法')
    @staticmethod
    def func1():
        print('这个是静态方法')
print(hasattr(A,'country'))
print(getattr(A,'country'))
ret = getattr(A,'func')
ret()
ret1 = getattr(A,'func1')
ret1()
setattr(A,'wang',28)
print(A.__dict__)
delattr(A,'country')
print(A.__dict__)

 

其他模块

import tbjx
content = input('请输入内容')
if hasattr(tbjx,content):
    print(getattr(tbjx,content))
#1.利用反射执行register函数
ret = getattr(tbjx,'register')
ret('xing','123456')
#2.利用反射获取A类country的属性
print(getattr(getattr(tbjx,'A'),'country'))
#3.利用反射获取A类,实例化一个对象,并获得对象的name,age 属性
obj = getattr(tbjx,'A')('小红',23)
print(getattr(obj,'name'))

 

本模块

def func1():
    print('in 反射 func1')
import sys
ret = sys.modules[__name__]
print(sys.modules[__name__])
#<module '__main__' from 'C:/Users/15471/PycharmProjects/newpro/day23/exercise.py'>
#当前py文件作为对象,调用func1函数
getattr(ret,'func1')() #获取并执行func1函数

反射的实例

class User:
    def login(self):
        print('欢迎来到登录页面')
 
    def register(self):
        print('欢迎来到注册页面')
 
    def save(self):
        print('欢迎来到存储页面')
while 1:
    choose = input('请输入你的应用').strip()
    obj = User()
    if hasattr(obj,choose): #两行代码,搞定所有的if判断
        getattr(obj,choose)()

 

 

转载于:https://www.cnblogs.com/Ailsa-a/p/10519779.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值