博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象进阶
阅读量:5968 次
发布时间:2019-06-19

本文共 1661 字,大约阅读时间需要 5 分钟。

一:反射

1,python面向对象中的反射就是通过字符串的形式操作对象的相关属性。

2,getattr() 从命名空间中获得这个名字对应的值,找一个属性 ,直接就可以找到这个属性的值,找一个方法 ,找到的是这个方法的内存地址。

3,hasattr() 判断命名空间里有没有这个名字

4,正常情况下如果可以拿到这个变量 那么如有有这个变量的字符串形式 就是用反射可以获取到这个值。

class A:    role = 'Person'    def func(self):        print('*'*self)ret = input('>>>')print(A.__dict__[ret])print(getattr(A,'role'))     getattr(A,'func')(1)
View Code
class A:    role = 'Person'    def func(self):        print('*'*self)print(hasattr(A,'r'))print(hasattr(A,'role'))print(hasattr(A,'func'))ret = input('>>>')if hasattr(A,ret):    print(getattr(A,ret))     # getattr从A的命名空间里找一个属性 ,属性不存在会报错if hasattr(A,ret):    func = getattr(A,ret)    func(1)
View Code
class A:    role = 'Person'    def __init__(self):        self.money = 500    def func(self):        print('*'*10)a = A()print(a.func)getattr(a,'func')()print(getattr(a,'money'))
View Code
# import time   # 一个py文件就是一个模块# time.time()# print(time.time())# print(getattr(time,'time')())# import os# os.rename('userinfo','user')# getattr(os,'rename')('user','user_info')
模块使用模块中的名字
def login():    print('执行login功能')def register():    print('执行register功能')import sys  # 和python解释器相关的内容都在sys里print(sys.modules['__main__'])func = input('>>>')if hasattr(sys.modules['__main__'],func):    getattr(sys.modules['__main__'],func)()
从自己所在的模块中使用自己名字
class A:    def __init__(self,name):        self.name = name    def wahaha(self):        print('wahahahahaha')a = A('alex')#给a对象新增一个属性#方法一a.age = 18print(a.__dict__)#方法二setattr(a,'age',18)print(a.__dict__)#给a对象修改一个属性setattr(a,'name','egon')print(a.__dict__)#给a对象删除一个属性#方法一#del a.age#方法二#delattr(a,'age')
增删改对象属性

 

转载于:https://www.cnblogs.com/leiwei123/p/8877367.html

你可能感兴趣的文章
Web应用工作原理、动态网页技术
查看>>
EXCEL工作表保护密码破解 宏撤销保护图文教程
查看>>
Catalan数(卡特兰数)
查看>>
.Net Core下使用 RSA
查看>>
python 数据库中文乱码 Excel
查看>>
利用console控制台调试php代码
查看>>
递归算法,如何把list中父子类对象递归成树
查看>>
jsf初学解决GlassFish Server 无法启动
查看>>
hdu 1050 (preinitilization or postcleansing, std::fill) ...
查看>>
Form各键盘触发子所对应的“按键”
查看>>
【java IO】使用Java输入输出流 读取txt文件内数据,进行拼接后写入到另一个文件中...
查看>>
Linux系统下安装rz/sz命令及使用说明
查看>>
第一次模拟面试
查看>>
window.showModalDialog
查看>>
Pycharm选择pyenv安装的Python版本
查看>>
?Sized 和 Sized
查看>>
Java中如何防止内存泄漏的发生
查看>>
Java中Int转byte分析
查看>>
滑动窗口最大值的golang实现
查看>>
初学Phreeze 3
查看>>