类里面的函数就叫做方法。
isinstance(obj, cls) obj对象是不是cls类的实例
issubclass(sub, super)
sub类是不是super类的子类
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...
```
原文:https://www.cnblogs.com/py-xiaoqiang/p/11210481.html