7.15 内置方法(method)
类里面的函数就叫做方法。
-
isinstance(obj, cls)
obj对象是不是cls类的实例 -
issubclass(sub, super)
sub类是不是super类的子类 -
反射的方法
- hasattr(o, name)
- getattr(o, name, [default])
- setattr(o, name, value)
- delattr(o, name)
-
item系列:把对象的访问模拟成字典类型
- __getitem__(self, item)
- __setitem__(self, key, value)
- __delitem__(self, key)
class Foo: def __init__(self, name): self.name = name def __getitem__(self, item): print('getitem...') print(item) return self.__dict__.get('item') # 因为item是字符串类型,需要这样调用。用get方法,没有相应属性也不会报错 # if hasattr(self, item): # 这样也可以 # return getattr(self, item) def __setitem__(self, key, value): print('setitem...') print(key, value) self.__dict__[key] = value # 设置属性 def __delitem__(self, key): print('delitem...') print(key) self.__dict__.pop(key) # 或者 del self.__dict__[key] ,删除属性 obj = Foo('aaa') print(obj.__dict__) # 用字典的方式调用属性:getitem obj['name'] # 相当于obj.name print(obj.__dict__) # 用字典的方式设置属性:setitem obj['name'] = 'bbb' # obj.name = 'bbb' obj['age'] = 11 print(obj.__dict__) # 用字典的方式删除属性: del obj['age'] print(obj.__dict__)执行结果:
{'name': 'aaa'} getitem... name {'name': 'aaa'} setitem... name bbb setitem... age 11 {'name': 'bbb', 'age': 11} delitem... age {'name': 'bbb'} -
__str__(self)
定义打印时候的格式,# python中的dict类,在打印对象的时候会输出字典格式的结果 # 但是我们定义的类,打印对象的时候只会显示是一个对象和其内存地址 # __str__内置方法就可以让我们自定义打印的方式 class People: def __init__(self, name, age): self.name = name self.age = age def __str__(self): # __str__必须返回一个字符串类型,不然报错 print('__str__...') return '{name:%s,age:%s}' % (self.name, self.age,) p1 = People('aaa', 11) print(p1) # 这时候会打印__str__定义的结果执行结果:
__str__... {name:aaa,age:11} -
__del__
回收跟对象相关联的资源时使用
触发时机:会在删除其绑定对象之前,先触发__def__()方法。# python中的open方法,实际上内部是python程序向os发送请求后,os打开的文件(应用程序是无法直接操作硬盘上的数据的,必须经过os) # 所以当你关闭应用程序前,也必须告诉os关闭对文件的操作(释放os的操作) # 我们模拟一下open方法来说明__del__的作用 class Open: def __init__(self, filename): print('对os发送请求,os打开文件...') self.filename = filename def __del__(self): # 在这个方法里可以定义一些回收os资源的操作 print('__del__...') f = Open('test.txt') # 模拟打开文件 # def f # 如果在这里删除 f ,那么 __del__会在这里触发 print('----main----') # 这里程序已经执行完毕,python的自动垃圾回收机制会回收 f 对象,但是os的操作并不能回收 # 从执行结果我们可以知道,__del__最后的print之后执行,也就是自动回收 f 的时候(确切上说是 f 被回收之前)执行__del__执行结果:
对os发送请求,os打开文件... ----main---- __del__...

浙公网安备 33010602011771号