class A():
def __init__(self, name, age):
self.name = name
self.age = age
obj = A('joe', 18)
obj.name
# @ 获取 name的值
b = 'name'
print("dict", obj.__dict__)
print("dict[name]", obj.__dict__['name'])
# 获取属性 获取name的值
print("获取属性值 getattr", getattr(obj, 'name'))
# 判断是否存在
print("判断是否存在 hasattr", hasattr(obj, 'name'))
# 设置属性值
print("dict", obj.__dict__)
setattr(obj, 'k1', 'v1') # 添加
print("dict", obj.__dict__)
# 删除
delattr(obj, 'k1') # 删除
print("dict", obj.__dict__)
# 属性获取 在模块中的使用
import s2
print("获取s2的", getattr(s2, 'name')) # 获取属性值
f = getattr(s2, 'func') # 获取函数
print("获取s2的函数执行", f()) # 打印函数执行结果
cls = getattr(s2, 'Q')
print(cls)
obj = cls('')
print(obj)
obj.name
inp = input('please input')
if hasattr(s2, inp):
func = getattr(s2, inp)
re = func()
print(re)
else:
print('404 不存在该模块')
s2.py文件如下:
name = 'smith'
def func():
return 'func'
class Q():
def __init__(self, name):
self.name = name
def f1():
return ' 1'
def f2():
return ' 2'
def f3():
return ' 3'
def f4():
return ' 4'
小结:
- .__dict__获取对象字典
- __dict__['name'] 获取key为name的属性值
- getattr(obj,'name') 直接从对象obj中获取key为name的属性值
- hasattr(obj,'name') 判断对象obj中是否包括key为name的属性值
- setattr(obj,'key','value') 设置对象obj中的key设置为value 如果没有该key直接添加该key并值设置为value
- delattr(obj,'key') 删除对象obj中的key 为'key'的键值对
- 以上同样适用于不同文件之间
- f=getattr(s2,'func') 获取s2文件中的函数 print(f()) 在可以直接获取函数执行结果 注意:f 获取的是函数 f() 可以直接执行