百木园-与人分享,
就是让自己快乐。

学习python第十一天 反射、动态加载模块

反射,主要指程序可以访问、检测和修改它本身状态或者行为的一种能力(自省)

可以通过字符串的形式来操作对象的属性

class Person:

  def __init__(self,name,age):

    self.name = name

    self.age = age

p = Person(\"jack\",12)

想判断类中是否有某个属性p.name直接调用了没有的话报错,所以这种方法无法判断。需要用字符串形式来操作对象的属性

if hasattr(p,\"name2\")                   #hasatter方法是反射的一个方法,判断类中是否有这个属性,返回布尔值。第一个参数是实例,第二个参数是加了引号的属性名称

  print(\"123456\")      #如果存在打印123456 ,不存在不打印

共有四个方法:

  hasattr():判断

  getattr():获取

  setattr():赋值

  delattr():删除

class Person:

  def run(self):

    print(\"running on the road and seeing the pretty girl!\")

user_command = input(>>:).strip( )

if hasattr(p,user_command):

  func = getattr(p,user_command)                #如果函数中有输入的函数名,执行的话就需要将函数赋值,要不然无法执行

  func()    #执行

setattr:

class Person:

  def __init__(self,name):

    self.name = name  

p = Person(\"jack\")

setattr(p,\"age\",12)

print(p.age)               #只存在实例中,类中没有这个属性

添加方法(函数):

def walk(self):      #将需添加的函数按着类中的函数格式写出

  print(slef.name)

setattr(p,\"func\",walk)    #第二个参数是赋进去的函数名,第三个参数是被赋进的函数名

p.func(p)      #记得调用的时候需要将实例传入才行

类也是个对象,也可以添加

删除delattr:

delattr(p,\"age\")

 

动态加载模块:即不在最开始import加载模块,用的时候再加载

这个学的就是一个模块加载的方法,简单一行代码

import importlib

importlib.import_moudle(\"文件名\")

来源:https://www.cnblogs.com/xiaoyuheng/p/14624485.html
图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 学习python第十一天 反射、动态加载模块

相关推荐

  • 暂无文章