- getattr 获取指定字符串名称的对象属性
- setattr 为对象设置一个对象
- hasattr 判断对象是否有对应的对象(字符串)
- delattr 删除指定属性
1、getattr
def getattr(object, name, default=None)
- object:对象
- name:字符串类型,表示对象的属性
- default:如果name表示的属性在对象中不存在,默认会报错。如果设置了default,则不会报错而是返回default值
class stu():
name = 'abc'
def set_name(n):
self.name = n
s = stu()
print(getattr(s, 'name'))
print(getattr(s, 'age', 20))
set_name = getattr(s, 'set_name')
set_name('ccc') # 相当于调用方法
2、setattr
def setattr(x, y, v)
- x表示对象,y表示属性名,v表示属性值
- 并不会返回有返回值
- 如果对象已经存在属性y,则相当于覆盖,如果不存在,则表示新增属性
class stu():
name = 'abc'
s = stu()
setattr(s, 'name', 22)
setattr(s, 'age', 123)
3、hasattr
def hasattr(*args, **kwargs)
- 判断是否具有属性或者方法,如果有则返回True,否则返回False
class stu():
name = 'abc'
def set_name():
pass
s = stu()
print(hasattr(s, 'name'))
print(hasattr(s, 'age'))
print(hasattr(s, 'set_name'))
4、delattr
def delattr(x, y)
- x表示对象,y表示属性名
- y不能为方法名或者不存在的属性名,或者会报错
class stu():
name = 'abc'
def __init__(self, age):
self.age = age
s = stu(18)
delattr(s,'age')
print(hasattr(s, 'age'))
- 注意,delattr只能删除对象的经过self调用的属性,否则会报错。
- 即这里只能删除age而不能删除name
5、动态导入模块
import() 函数用于动态加载类和函数 。
如果一个模块经常变化就可以使用 import() 来动态载入。
import sys
__import__('a') # 导入 a.py 模块