python面向对象进阶

时间:2023-02-15 13:41:31

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