神奇的反射(很重要)
class Student(object):
def __init__(self, name):
self.name = name
def eat(self):
print("%s在吃东西" % self.name)
s = Student("张三")
def run(self):
print("%s在跑步!!!" % self.name)
# hasattr 判断对象是否有该属性
command = input("请输入用户指令:").strip()
if hasattr(s, command):
func = getattr(s, command)
func()
# getattr 得到这个属性的字符串
a = getattr(s, "name")
print(a)
# setattr 修改属性
setattr(s, "age", 18) # 新增属性
print(s.age)
setattr(Student, "run", run) # 新增一个方法
s.run()
# delattr
delattr(s, "age") # 下面两个方法是一样的效果
print(s.age)
del s.age
print(s.age)
利用反射拿到一个.py文件中的某个对象
import sys
# for k, v in sys.modules.items():
# print(k, v)
print(sys.modules['__main__'])
a = sys.modules[__name__]
if hasattr(a, "s"):
b = getattr(a, "s")
print(b) # 拿到这个文件下的p实例对象
print(a.s)
print(s)