python中很实用的 gettar 、hasattr、setattr、delattr 等反射方法

1.反射导入模块中的属性、函数、类

python面向对象中的反射:通过字符串的形式操作对象相关的属性

python中的一切事物都是对象(都可以使用反射)

四个反射相关的函数

-hasattr :判断是否有此变量,返回bool 值

-getattr : 获取属性值或者获取方法变量的地址

-setattr :给类或者对象设置属性或者方法 (用的场合很少,了解即可)

-delattr:  删除类或者对象的属性或方法(用的场合很少,了解即可)

- 反射类的属性和方法

- 反射对象的属性和方法

- 反射模块的属性和方法

 

getattr()

获取对象/类中的成员值

格式:getattr(对象,'属性名'[,成员不存在时的默认值])

返回值:成员的值

 

练习1:获取静态方法和类方法。

# 练习:获取静态方法和类方法
# getattr()
class Teacher(object):
    dic1 = {'查看学生信息':'show_student','查看讲师信息':'show_teacher'}
    def __init__(self,name,age):
        self.name = name
        self.age = age

    # 类方法
    @classmethod
    def func(cls):
        print('类方法...')

    @staticmethod
    def func1():
        print('静态方法...')

    def show_student(self):
        print('show_student')

    def show_teacher(self):
        print('show_teacher')

#1.获取类
fun  = getattr(Teacher,'func')    # 将func的地址给了fun
fun()
# 2.获取静态方法
func1 = getattr(Teacher,'func1')
func1()

ret = getattr(Teacher,'dic1')
print(ret)


b = hasattr(Teacher,'dic1')
print(b)

2.获取对象的属性值和普通方法。

teacher = Teacher('zs',20)

name = getattr(teacher,'name')   # 获取name属性值
print(name)  # zs

age = getattr(teacher,'age')    # 获取age属性值
print(age)  # 20

 

hasattr()

检测对象/类是否具有某个成员

格式:hasattr(对象/类,'成员名')

返回值:布尔值

b = hasattr(Teacher,'dic1')
print(b)    # True

teacher = Teacher('zs',18)
a = hasattr(teacher,'name')
print(a)   # True

 

setattr()

设置或者添加对象/类中的成员

格式:setattr(对象,'成员名',值)

返回值:None

 

练习1:给A类对象添加静态age属性

class A(object):
    pass


a = A()
setattr(a, 'age', 10)
print(a.age)

练习2:给A类中添加name属性

class A(object):
    pass


a = A()
setattr(a, 'name', 'ww')
print(a.name)

 

delattr()

删除对象/类中的成员

格式: delattr(对象,成员)

返回值:None

 

练习3:删除a对象的name属性

class A(object):
    pass


a = A()
delattr(a, 'name')
print(a.name)  # 报错

 

 

你可能感兴趣的:(基础)