python学习-68 反射

                    反射

1.什么是反射?

反射的概念是有Smith在1982年首次提出的,主要是指程序可以访问、检测和修正它本身状态或行为的一种能力(自省)。

2.以下四个方法可以实现自省

hasattr(object,name)

getattr(object,name,default=None)

setattr(x,y,v)

delattr(x,y)

class Car:
    feture = 'big'

    def __init__(self,name,color):
        self.name = name
        self.color = color
    def get_car(self):
        print('this car is %s' %self.name)
    def color_car(self):
        print('this car is %s ' % self.color)

c1 = Car('benchi','red')

print(hasattr(c1,'name'))       # 查看是否能调用name这个属性
print(getattr(c1,'name'))       # 查看调用name后的值


setattr(c1,'size','big')        # 修改
print(c1.__dict__)


del c1.size                 # 删除
print(c1.__dict__)

运行结果:

True
benchi
{'name': 'benchi', 'color': 'red', 'size': 'big'}
{'name': 'benchi', 'color': 'red'}

Process finished with exit code 0

3.导入动态模块名称

第一种导入方法:

a = __import__('字符串')      

print(a)

例如m1文件夹下的b中的test模块

a = __import__('m1.b')    # 只能定位到m1   .  可以print(a)试一下

a.b.test()

第二种导入方法:

import importlib

a = importlib.import_module('m1.b')       # 直接定位到b   。可以print(a)试一下

m.test

4.补充封装私有

如果导入模块时,假如test前面有_代表私有,隐藏属性。导入时也需要加上_,不然会报错无法访问。

猜你喜欢

转载自www.cnblogs.com/liujinjing521/p/11799977.html