首页 > 代码库 > python面向对象进阶
python面向对象进阶
isinstance(obj,cls)检查是否obj是否是类 cls 的对象。
isinstance(obj,cls)检查是否obj是否是类 cls 的对象。
反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)
四个可以实现自省的函数(参数是对象,字符串格式的属性名)
hasattr
getattr
setattr
delattr
__del__,就是析构方法,当对象在内存中被释放时,自动触发执行。
注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。经过查找,Python中没有专用的构造和析构函数,但是一般可以在__init__和__del__分别完成初始化和删除操作,可用这个替代构造和析构
__getitem__
__getitem__这种带双下划线方法的特殊性
在本文开头那个例子中,如果类定义了这个__getitem__方法,那么对类进行切片时,(以 对象名[‘key‘] 的格式进行操作时,会触发__getitem__的运行),切片会作为__getitem__的参数传入,还可以通过start和stop方法获取到切片的两个值.
Python中想要使类的实例像list一样使用下标,可以用__getitem__方法,而配合slice对象则可以实现list一样的切片
def __setitem__(self,key,value)
return setattr(self,key,value)
def __delitem__(self,key)
return delattr(self,key)
__str__
一、说明:
__init__:类实例初始化函数
__str__:类实例字符串化函数
二、
示例1:
class Friend():
def __init__(self, name):
self.name = name
if __name__ == ‘__main__‘:
friend = Friend(‘Liang‘)
print friend
输出结果:<__main__.Friend instance at 0x1d92a70>
上面的返回结果是存储地址, 如何打印出一个对象的有感内容呢? 可以通过__str__函数
实例2:
class Friend():
def __init__(self, name):
self.name = name
def __str__(self):
return "Freind : %s" %self.name
if __name__ == ‘__main__‘:
friend = Friend(‘Liang‘)
print friend
输出结果: Friend: Liang
python面向对象进阶