【Python】反射与内置方法

'''
一.isinstance(obj, cls) 与 issubclass(sub, super)

isinstacne(obj, cls) 判断obj是否cls的对象

issubclass(sub, super) 判断sub类是否super类的派生类
'''

'''
二.反射 一种程序可以 访问、检测和修改 自身属性的能力
'''
# 反射:通过字符串反射到对象的属性, 命令行操作的系统推荐使用(数据库)
class Foo:
def run(self):
while True:
cmd = input('>>').strip().split()
print(cmd)

if hasattr(self, cmd[0]):
func = getattr(self, cmd[0])
func(cmd)

# hasattr(obj, 'name')
# getattr(obj, 'name', None)
# setattr(obj, 'name', 'hello')
# delattr(obj, 'name')

'''
三.内置方法
'''

class Foo:
# item 系列
def __getitem__(self, item): # self.'item'
if hasattr(self, item):
return self.__dict__[item]
else:
print('no %s' % item)
return None

def __setitem__(self, key, value): # self.'key'=value
setattr(self,key,value) #setitem 与 setattr的区别: setitem是定制用的,setattr是内置函数
self.__dict__[key] = value

def __delitem__(self, key): # def self.'key'
del self.__dict__[key]

# __str__ 设定print()后打印内容
def __str__(self):
return '====>str'

# __del__ 设定删除对象前执行的操作
def __del__(self):
print('hello')
# delattr(self') # 自动触发,无需写

# __call__ 设定对象的call方法
def __call__(self, *args, **kwargs):
print(self)
print(args)
print(kwargs)



f = Foo()
print(f)
del f
f
posted @ 2018-08-26 13:25  caya  阅读(107)  评论(0编辑  收藏  举报