'''
一.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