python 类的内置方法_Python之面向对象:类的内置方法

1、def __add__(self,other):

c1+c2 两个实例的加法操作就是执行__add__()方法

2、__str__(self):

print一个实例的时候,执行的是__str__()这个内置方法

eg:

class Vector(object):

def __init__(self,a,b):

self.a = a

self.b = b

def __str__(self):

return 'Vector(%d,%d)'%(self.a,self.b)

def __add__(self, other):

return Vector(self.a+other.a, self.b+other.b)

v1 = Vector(2,8)

v2 = Vector(4,98)

# print v1 + v2

v3 = v1 + v2

print v3

print v1#

3、__del__()

实例消亡的时候执行

4、类的帮助信息 三引号中的内容

__doc__

''' Production of the class A

attr:

method:

'''

5、类的实例属性是字典的时候,使用以下三个方法

__getitem__() :返回当前的实例属性的字典值

__setitem__():属性中的key和value重新赋值

__delitem__():删除实例属性中的某个字典key和value值

class A(object):

'''Production of the class A:

attr:

method:

end.'''

#__getitem__

#__setitem__

#__delitem__

class Employee(object):

def __init__(self,name,salary):

self.dict1={}

self.dict1[name]=salary

def __getitem__(self, key):

if self.dict1.has_key(key):

print key,self.dict1[key]

def __setitem__(self, key, value):

self.dict1[key]=value

def __delitem__(self, key):

if self.dict1.has_key(key):

del self.dict1[key]

e1=Employee('Lily',10000)

e1['Lily']

e1['Jenny']=20000

e1['Jenny']

del e1['Jenny']

e1['Jenny']

6、实例属性是序列的时候,所作的切片操作

__getslice__():对实例属性做切片

__setslice__():

__delslice__():

7、__call__(self,*args,**kwargs)

通过实例对__call__方法重写 e1(1,2,3,a='abc')

8、__dict__ 返回属性和方法

Employee.__dict__ :类属性和所有的方法

e.__dict__ 实例属性和类的指针

9、__iter__() 使用迭代器,返回迭代器的内容时,就是调用了__iter__方法,返回一个迭代器

def __iter__(self):

return iter(self.list1[:])

eg:

class Employee(object):

def __init__(self,name,salary):

self.list1=[]

def __getslice__(self,i,j):

return self.list1[i:j]

def __setslice__(self, i, j, sequence):

self.list1[i:j]=sequence

def __delslice__(self, i, j):

del self.list1[i,j]

def __iter__(self):

return iter(self.list1[:])

e1=Employee('Lily',10000)

e1[:4]='fjwioefjior'

print e1[:]

for i in e1:

print i

10、__new__(cls,*args,**kwargs):

new的时候才生成了实例,所以是类方法

return object.__new__(cls,*args,**kwargs)

a=A() 这个时候会默认先执行__new__这个内置方法

使用在单例(只有一个实例)这种设计模式中:

通过 __new__方法实现单例的思路:创建实例之前,判断是否创建过,如果有,不重新创建,没有则重新创建

#__new__

class A(object):

def __init__(self,a):

print 'init method'

self.a = a

def __new__(cls, *args, **kwargs):

if not hasattr(cls,'_instance'):

cls._instance = object.__new__(cls,*args, **kwargs)

return cls._instance

之前是否创建过实例,如果有,则不重新创建,如果没有,则重新创建

a1 = A(4)

print a1.a # 4

a2 = A(6)

print a2.a # 6

print a1.a # 6

实例属性是同一个,但是每次实例化的时候,还会再执行__init__()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值