反射
#反射:通过字符串映射到对象的属性
# class People:
# country='china'
#
# def __init__(self,name,age):
# self.name=name
# self.age=age
#
# def talk(self):
# print('%s is talking'%self.name)
#
# obj=People('egon',10)
# print(obj.name)
# print(obj.talk)
# choice=input('>>: ') #name
# print(obj.choice) #print(obj.'name')
# print(hasattr(obj,'name')) #obj.name#obj.__dict__['name']
# print(hasattr(obj,'talk'))
# print(getattr(obj,'namexxx',None))
# print(getattr(obj,'talk',None))
# setattr(obj,'sex','male')
# print(obj.sex)
#
# delattr(obj,'age')
# print(obj.__dict__)
# print(getattr(People,'country'))
#反射的应用
class Service:
def run(self):
while True:
inp=input('>>:').strip()
cmds=inp.split()
# print(cmds)
if hasattr(self,cmds[0]):
func=getattr(self,cmds[0])
func(cmds)
def get(self,cmds):
print('get......',cmds)
def put(self,cmds):
print('put.......',cmds)
obj=Service()
obj.run()
内置方法
#item系列
class Foo:
def __init__(self,name):
self.name=name
def __getitem__(self, item):
# print('getitem')
# print(item)
# self.__dict__['item']
return
def __setitem__(self, key, value):
print('setitem')
print(key ,value)
def __delitem__(self, key):
print('delitem')
print(key)
obj=Foo('egon')
# 查看属性
#obj. 属性名
# print(obj['namexxx']) #obj.name
# 设置属性
# obj.sex='male'
# obj['sex'] ='male'#obj.name
# print(obj.__dict__)
# print(obj.sex)
# 删除属性
# del obj.name
# del obj.['name']
#
# print(obj.__dict__)
# d=dict({'name':'egon'})
# # print(isinstance(d.dict))
# print(d)
# class People:
# def __init__(self,name,age):
# self.name=name
# self.age=age
#
# def __str__(self):
# # print('========>>str')
# return '<name:%s,age:%s>'%(self.name,self.age)
#
# obj=People('egon',12)
# print(obj) #res=obj.__str__()
#__del__
# f=open('settings.py')
# f.read()
#
# f.close() #回收操作系统的资源
# print(f)
class Open:
def __init__(self,filename):
print('open file...')
self.filename=filename
def __del__(self):
print('回收操作系统的资源:self.close()')
f=Open('settings.py')
del f #f.__del_()
print('---main---') #def f #f.__del__()