栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python面向对象基础

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python面向对象基础

1.__init__

__init__方法可以简单的理解为类的构造方法(实际并不是构造方法,只是在类生成对象之后就会被执行),之前已经在上一篇博客中说明过了。

2.__del__

__del__方法是类中的析构方法,当对象消亡的时候(被解释器的垃圾回收的时候会执行这个方法)这个方法默认是不需要写的,不写的时候,默认是不做任何操作的。因为你不知道对象是在什么时候被垃圾回收掉,所以,除非你确实要在这里面做某些操作,不然不要自定义这个方法。

3.__call__

__call__方法在类的对象被执行的时候(obj()或者 类()())会执行。

4.__int__

__int__方法,在对象被int()包裹的时候会被执行,例如int(obj)如果obj对象没有、__int__方法,那么就会报错。在这个方法中返回的值被传递到int类型中进行转换。

5.__str__

__str__方法和int方法一样,当对象被str(obj)包裹的时候,如果对象中没有这个方法将会报错,如果有这个方法,str()将接收这个方法返回的值在转换成字符串。

6.__add__

__add__方法在两个对象相加的时候,调用第一个对象的__add__方法,将第二个对象传递进来,至于怎么处理以及返回值,那是程序员自定义的,就如下面的例子:

 

class abc:

     def __init__(self,age):

     self.age=age

  def __add__(self,obj):

      return self.age+obj.age

     a1=abc(18)

     a2=abc(20)

 print(a1+a2)

#执行结果:38

7.__dict__

__dict__方法在类里面有,在对象里面也有,这个方法是以字典的形式列出类或对象中的所有成员。就像下面的例子:

 

class abc:

   def __init__(self,age):

   self.age=age

def __add__(self,obj):

    return self.age+obj.age

       a1=abc(18)

print(abc.__dict__)

print(a1.__dict__)

#执行结果:

  1. {'__add__': , '__module__': '__main__', '__weakref__': , '__init__': , '__doc__': None, '__dict__': }

  2. {'age': 18}

8.__getitem__ __setitem__ __delitem__

__getitem__方法匹配 对象[索引] 这种方式,__setitem__匹配 对象[索引]=value 这种方式,__delitem__匹配 del 对象[索引] 这种方式,例子如下:

 

class Foo:

    def __init__(self,name,age):

    self.name=name

    self.age=age

def __getitem__(self, item): # 匹配:对象[item]这种形式

    return item+10

def __setitem__(self, key, value): # 匹配:对象[key]=value这种形式

    print(key,value)

def __delitem__(self, key): # 匹配:del 对象[key]这种形式

     print(key)

li=Foo("alex",18)

print(li[10])

li[10]=100

del li[10]

  1. 执行结果:

  2. 20

  3. 10 100

  4. 10

9.__getslice__ __setslice__ __delslice__

这三种方式在python2.7中还存在,用来对对象进行切片的,但是在python3之后,将这些特殊方法给去掉了,统一使用上面的方式对对象进行切片,因此在使用__getitem__ __setitem__ 这两个方法之前要先判断传递进参数的类型是不是slice对象。例子如下:

 

class Foo:

    def __init__(self,name,age):

    self.name=name

    self.age=age

    self.li=[1,2,3,4,5,6,7]

def __getitem__(self, item): # 匹配:对象[item]这种形式

   if isinstance(item,slice): # 如果是slice对象,返回切片后的结果

   return self.li[item] # 返回切片结果

elif isinstance(item,int): # 如果是整形,说明是索引

    return item+10

def __setitem__(self, key, value): # 匹配:对象[key]=value这种形式

   print(key,value)

def __delitem__(self, key): # 匹配:del 对象[key]这种形式

   print(key)

def __getslice__(self,index1,index2):

    print(index1,index2)

li=Foo("alex",18)

print(li[3:5])

  1. #执行结果:

  2. [4, 5]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/503742.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号