(八)面向对象----(四)
目录
getattr() hasattr() setattr() delattr()
8.1反射
getattr()
getattr() 函数用于返回一个对象属性值
getattr(object, name[, default])
#name是字符串,如对象内没有字符串属性,就报错
class Teacher:
dic = {'查看学生信息':'show_student','查看讲师信息':'show_teacher'}
def __init__(self,name):
self.name = name
def show_student(self):
print('show_student')
def show_teacher(self):
print('show_teacher')
@classmethod #这个方法可直接被类调用,不依托任何对象---类方法
def func(cls):
print('hahaha')
print(getattr(Teacher,'dic')) #类属性(静态属性)
ret = getattr(Teacher,'func') #类方法
ret()
alex = Teacher(alex)
print(getattr(alex,'name')) #对象属性
ret1 = getattr(alex,'show_teacher') #对象方法
ret1()
'''
{'查看学生信息': 'show_student', '查看讲师信息': 'show_teacher'}
hahaha
alex
show_teacher
'''
反射自己模块的方法和属性
def f():
print('aa')
year = 2019
import sys
# 反射自己模块中的变量
print(getattr(sys.modules['__main__'],'year'))
# 反射自己模块中的函数
getattr(sys.modules['__main__'],'f')()
'''
2019
aa
'''
变量名 = input('>>>')
print(getattr(sys.modules[__name__],变量名))
反射函数有参数
import time
print(time.strftime('%Y-%m-%d %H:%M:S'))
print(getattr(time,'strftime')('%Y-%m-%d %H:%M:S'))
hasattr()
hasattr() 函数用于判断对象是否包含对应的属性
class Teacher:
dic = {'查看学生信息':'show_student','查看讲师信息':'show_teacher'}
if hasattr(Teacher,'dic'):
print(11111)
#11111
#如果对象有该属性返回 True,否则返回 False
输入字典的key就可直接调用对应的方法
class Teacher:
dic = {'查看学生信息':'show_student','查看讲师信息':'show_teacher'}
def show_student(self):
print('show_student')
def show_teacher(self):
print('show_teacher')
alex = Teacher()
for k in Teacher.dic:
print(k)
key = input('输入需求 :')
if hasattr(alex,Teacher.dic[key]):
func = getattr(alex,Teacher.dic[key])
func()
setattr() delattr()
#setattr 设置修改变量
class A:
pass
a = A()
setattr(a,'name','aa')
setattr(A,'name','bb')
print(A.name)
print(a.name)
'''
aa
bb
'''
# delattr 删除一个变量
delattr(a,'name')
print(a.name)
'''
aa
'''
8.2类的内置的方法
相关链接:https://blog.csdn.net/zeroooorez/article/details/89914815
__str__() __repr__()
item:__getitem__() __setitem__() __delitem__()
__del__()
__new__()
__call__()
with和__enter__,__exit__
__len__()
__hash__()
__eq__()