Python面向对象中反射

 

目录

 

反射是什么?

Python中的反射主要方法:

方法的使用

类也是对象

反射当前模块成员

动态导入模块(基于反射当前模块成员)

__setattr__、__delattr__、__getattr__方法

二次加工标准类型(包装)

授权

isinstance和issubclass方法

item方法

改变对象的字符串显示


反射是什么?

反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力,在python中一切皆对象(类,实例,模块等等都是对象),那么我们就可以通过反射的形式操作对象相关的属性。

Python中的反射主要方法:

1.hasattr(object,name)

判断对象中有没有一个name字符串对应的方法或属性

2.getattr(object, name, default=None)

获取对象name字符串属性的值,如果不存在返回default的值

3.setattr(object, key, value)

设置对象的key属性为value值,等同于object.key = value

4.delattr(object, name)

删除对象的name字符串属性

方法的使用

class Map:
    f1 = '召唤师峡谷'
    def __init__(self,name,addr):
        self.name = name
        self.addr = addr
    def from1(self):
        print('%s来自%s'%(self.name,self.addr))
    def from2(self):
        print('%s选手是%s'%(self.addr,self.name))

b1 = Map('盖伦','上路')
#检测是否含有某属性;
print(hasattr(b1,'name'))       #True
print(hasattr(b1,'from1'))      #True

#获取属性;
n = getattr(b1,'name')
print(n)                        #盖伦
func = getattr(b1,'from1')
func()                          #盖伦来自上路
#getattr(b1,'abcsdf')            #报错
print(getattr(b1,'xxxxxxx','不存在'))  #不存在

#设置属性;
setattr(b1,'ADC','下路')
print(b1.__dict__)              #{'name': '盖伦', 'addr': '上路', 'ADC': '下路'}
setattr(b1,'贵族','VN'+'奥巴驴')
print(b1.__dict__)              #{'name': '盖伦', 'addr': '上路', 'ADC': '下路', '贵族': 'VN奥巴驴'}

#删除属性
delattr(b1,'addr')
print(b1.__dict__)              #{'name': '盖伦', 'ADC': '下路', '贵族': 'VN奥巴驴'}
delattr(b1,'ADC')
print(b1.__dict__)              #{'name': '盖伦', '贵族': 'VN奥巴驴'}

类也是对象

class Foo(object):
    test = 'hello world!'
    def __init__(self):
        self.name = 'xuan'

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值