1、反射操作相关的内置函数

(参考本博客-Python知识库-内置函数d05)

hasattr():判断对象是否包含对应的属性

hasattr 语法:

  1. hasattr(object, name)

参数说明

  • object — 对象。
  • name — 字符串,属性名。

如果对象有该属性返回 True,否则返回 False。

  1. s="hello word"
  2. print(hasattr(s,"split")) #s这个字符串变量 有split方法
  3. class Student:
  4. city="beijing"
  5. def __init__(self,name):
  6. self.name=name
  7. def eat(self):
  8. pass
  9. xiaoming=Student("小明")
  10. print(hasattr(xiaoming,"eat")) #xiaoming 这个实例对象,有eat方法
  11. print(hasattr(xiaoming,"city")) #xiaoming 这个实例对象,有city类变量
  12. 运行后>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  13. True
  14. True
  15. True

isinstance():判断一个对象是否是一个已知类型

isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。

语法
以下是 isinstance() 方法的语法:

  1. isinstance(object, classinfo)

参数

  • object — 实例对象。
  • classinfo — 可以是直接或间接类名、基本类型或者由它们组成的元组。

返回值
如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。
实例

  1. class Person:
  2. def eat(self):
  3. print("饿了,吃饭啦!")
  4. class Chinese(Person):
  5. def eat(self):
  6. print("中国人用筷子吃饭。")
  7. xiaoming=Chinese()
  8. print(isinstance(xiaoming,Person)) #传入实例对象,类名,判断这个对象是不是属于这个类
  9. 运行后>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  10. True

getattr():返回一个对象属性值

getattr() 函数用于返回一个对象属性值。

语法

  1. getattr(object, name[, default])

参数

  • object — 对象。
  • name — 字符串,对象属性。
  • default — 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。

返回值
返回对象属性值。

实例

  1. >>>class A(object):
  2. ... bar = 1
  3. ...
  4. >>> a = A()
  5. >>> getattr(a, 'bar') # 获取属性 bar 值
  6. 1
  7. >>> getattr(a, 'bar2') # 属性 bar2 不存在,触发异常
  8. Traceback (most recent call last):
  9. File "<stdin>", line 1, in <module>
  10. AttributeError: 'A' object has no attribute 'bar2'
  11. >>> getattr(a, 'bar2', 3) # 属性 bar2 不存在,但设置了默认值
  12. 3
  13. >>>

setattr():设置对象属性值

setattr() 函数对应函数 getattr(),用于设置属性值,该属性不一定是存在的。
语法

  1. setattr(object, name, value)

参数

  • object — 对象。
  • name — 字符串,对象属性。
  • value — 属性值。

返回值
无返回值

实例
以下实例展示了 setattr() 函数的使用方法:
对已存在的属性进行赋值:

  1. >>>class A(object):
  2. ... bar = 1
  3. ...
  4. >>> a = A()
  5. >>> getattr(a, 'bar') # 获取属性 bar 值
  6. 1
  7. >>> setattr(a, 'bar', 5) # 设置属性 bar 值
  8. >>> a.bar
  9. 5

如果属性不存在会创建一个新的对象属性,并对属性赋值:

  1. >>>class A():
  2. ... name = "runoob"
  3. ...
  4. >>> a = A()
  5. >>> setattr(a, "age", 28)
  6. >>> print(a.age)
  7. 28
  8. >>>

也可以给对象添加方法

  1. class User:
  2. name = "小新同学"
  3. real_name = "魏向京"
  4. @classmethod
  5. def say(cls):
  6. print(cls.real_name)
  7. def calc():
  8. return 1+1
  9. setattr(User,"country","中国") # 动态设置方法
  10. setattr(User,"jisuanqi",calc) # 动态设置方法
  11. print(User.country)
  12. print(User.jisuanqi())