面向对象的反射机制
反射: 让对象告诉我们相关信息(对象拥有的属性和方法, 对象所属的类等....)
"""
# # 1). 如果知道对象拥有的属性和方法.
# print(dir(str))
# f = open('/tmp/passwd')
# print(dir(f))
# 2). 判断对象所属的类
# print(type('hello'))
class Student(object):
"""
这是student类的帮助文档
"""
def __init__(self, name, age):
self.name = name
self.__age = age
def get_score(self):
return "score"
def get_grade(self):
return 'grade'
s1 = Student("fentiao", 10)
print(type(s1))
print(isinstance(s1, Student))
print(isinstance('hello', Student))
# 3). 跟据对象可以获取的内容
print(s1.__class__)
print(s1.__dict__)
print(s1.__doc__)
# 4). hasattr, getattr, setattr, delattr
# hasattr: 判断对象是否包含对应的属性或者方法名;
print(hasattr(s1, 'name'))
print(hasattr(s1, '__age')) # 私有属性, 私有方法, 是不能判断的;
print(hasattr(s1, 'score'))
print(hasattr(s1, 'get_score'))
print(hasattr(s1, 'set_score'))
# getattr: 用于返回对象的属性值或者方法名对应的方法体;
print(getattr(s1, 'name'))
print(getattr(s1, '__age', 'no attr'))
print(getattr(s1, 'get_score', 'no method')) <