1、反射操作相关的内置函数
hasattr():判断对象是否包含对应的属性
hasattr 语法:
hasattr(object, name)
参数说明
- object — 对象。
- name — 字符串,属性名。
如果对象有该属性返回 True,否则返回 False。
s="hello word"
print(hasattr(s,"split")) #s这个字符串变量 有split方法
class Student:
city="beijing"
def __init__(self,name):
self.name=name
def eat(self):
pass
xiaoming=Student("小明")
print(hasattr(xiaoming,"eat")) #xiaoming 这个实例对象,有eat方法
print(hasattr(xiaoming,"city")) #xiaoming 这个实例对象,有city类变量
运行后>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
True
True
True
isinstance():判断一个对象是否是一个已知类型
isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
语法
以下是 isinstance() 方法的语法:
isinstance(object, classinfo)
参数
- object — 实例对象。
- classinfo — 可以是直接或间接类名、基本类型或者由它们组成的元组。
返回值
如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。
实例
class Person:
def eat(self):
print("饿了,吃饭啦!")
class Chinese(Person):
def eat(self):
print("中国人用筷子吃饭。")
xiaoming=Chinese()
print(isinstance(xiaoming,Person)) #传入实例对象,类名,判断这个对象是不是属于这个类
运行后>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
True
getattr():返回一个对象属性值
getattr() 函数用于返回一个对象属性值。
语法
getattr(object, name[, default])
参数
- object — 对象。
- name — 字符串,对象属性。
- default — 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。
返回值
返回对象属性值。
实例
>>>class A(object):
... bar = 1
...
>>> a = A()
>>> getattr(a, 'bar') # 获取属性 bar 值
1
>>> getattr(a, 'bar2') # 属性 bar2 不存在,触发异常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'bar2'
>>> getattr(a, 'bar2', 3) # 属性 bar2 不存在,但设置了默认值
3
>>>
setattr():设置对象属性值
setattr() 函数对应函数 getattr(),用于设置属性值,该属性不一定是存在的。
语法
setattr(object, name, value)
参数
- object — 对象。
- name — 字符串,对象属性。
- value — 属性值。
返回值
无返回值
实例
以下实例展示了 setattr() 函数的使用方法:
对已存在的属性进行赋值:
>>>class A(object):
... bar = 1
...
>>> a = A()
>>> getattr(a, 'bar') # 获取属性 bar 值
1
>>> setattr(a, 'bar', 5) # 设置属性 bar 值
>>> a.bar
5
如果属性不存在会创建一个新的对象属性,并对属性赋值:
>>>class A():
... name = "runoob"
...
>>> a = A()
>>> setattr(a, "age", 28)
>>> print(a.age)
28
>>>
也可以给对象添加方法
class User:
name = "小新同学"
real_name = "魏向京"
@classmethod
def say(cls):
print(cls.real_name)
def calc():
return 1+1
setattr(User,"country","中国") # 动态设置方法
setattr(User,"jisuanqi",calc) # 动态设置方法
print(User.country)
print(User.jisuanqi())