python -- 面向对象:反射

7.6面向对象:反射

Python面向对象中的反射:通过字符串的形式操作对象相关的属性.Python中的一切事物都是对象(都可以使用反射).

7.6.1 对 对象的反射
class Foo:
    a = '类的静态变量'
    
    def __init__(self,name,age):
        self.name = name
        self.age = age
        
    def func(self):
        print(666)
        
obj = Foo('Agoni',18)

# 检测是否含有某属性
print(hasatter(obj,'a'))
print(hasatter(obj,'name'))

# 获取属性
print(getatter(obj,'age'))
f = getatter(obj,'func')
f()
print(getatter(obj,'sex',None))  # 不存在,返回None,如果没有第三个参数会报错

# 设置属性
setatter(obj,'hobby','足球')
print(obj.hobby) # 足球

# 删除属性
delatter(obj,'name')
delatter(obj,'job')  # 不存在,会报错
7.6.2 对类的反射
class Foo:
    static_field = 'work'
    
    def __init__(self):
        self.name = 'Agoni'
        
    def func(self):
        return 'func'
    
print(hasatter(Foo,'name'))
print(getatter(Foo,'static_field'))
print(getatter(Foo,'func'))
7.6.3 当前模块的反射
def func():
    print(111)
import sys
this_modules = sys.modules[__name__]   
print(this_modules)
print(getatter(this_modules,'func1'))  # 得到func1的内存地址

class A:
    static = 'A类'
    
import sys
this_modules = sys.modules[__name__]  # 获取当前脚本这个对象
cls = getatter(this_modules,'A')      # 获取A类
obj = cls() # 实例化对象
print(obj.static)  # A类
7.6.4 其他模块的反射
#一个模块中的代码  module_test.py
def test():
    print('from the test')
    
# 另一个模块中的代码  当前文件
import module_test as obj
obj.test()
print(hasatter(obj,'test'))
getatter(obj,'test')()
7.6.5 反射的应用***
class Auth:
    
    def login(self):
        print('登录页面')
        
    def register(self):
        print('注册页面')
        
    def exit(self):
        print('退出...')
       
 while 1:
    obj = Auth()
    choice = input('请输入方法名').strip()
    if hasatter(obj,choice):
        func = getatter(obj,choice)  # choice 必须是个字符串
        func()
    else:
        print('输入错误')

转载于:https://www.cnblogs.com/Agoni-7/p/11197730.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值