面向对象进阶

一:反射

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 = 18
print(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值