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__': <function abc.__add__ at 0x0000020666C9E2F0>, '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'abc' objects>, '__init__': <function abc.__init__ at 0x0000020666C9E268>, '__doc__': None, '__dict__': <attribute '__dict__' of 'abc' objects>}

  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]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值