Python之面向对象:类的内置方法
2024-08-28 21:42:10
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__()方法
最新文章
- oracle学习笔记
- MVC – 14.ajax异步请求
- HDu 1001 Sum Problem 分类: ACM 2015-06-19 23:38 12人阅读 评论(0) 收藏
- Vmware中为Mac Os安装vmtools
- C++ GUI Programming with Qt4 笔记 -- chap1
- 2017-05-4-C语言学习笔记
- [开源]WinForm 控件使用总结
- 【Java基础】【12String类】
- CentOS7设置阿里镜像
- Linux系统远程连接服务器命令行模式
- Thrift的一些概念
- 关于select的默认样式问题
- 100M双绞线接头的标准接法
- linux:ubuntu安装mysql(一)
- 输入控件tagsinput
- HTML BODY 背景图片
- 最小生成树 Prim(普里姆)算法和Kruskal(克鲁斯特尔)算法
- Syncovery : Google Docs protocol completely replaced with Google Drive
- 3dmax 2012 贴图通道与uv通道,烘焙场景
- 106 miles to Chicago---zoj2797(最短路问题,求概率,模板)
热门文章
- Guava Cache 工具类 [ GuavaCacheUtil ]
- dts--tests(四)
- Python入门必学:数据类型和变量的用法
- 关于sql server 2008 r2 展开时报错:参数名:viewInfo ( Microsoft SqlServer Management SqlStudio Explorer )解决思路
- python基础之内置函数补充、匿名函数、递归函数
- 【文件处理】xml 文件 DOM解析
- ARabevaluator 颜色渐变控制类
- IOS多网卡抓包
- 超轻量级异步JS框架,别再让嵌套影响我们的优雅代码!
- ios在tableview里面加subview后在ip4和ip5上显示不一样的问题