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__()方法
 

Python之面向对象:类的内置方法的更多相关文章

  1. Python进阶-XVIV 类的内置方法:__str__ 、__repr__、析构函数(__del__)、双下的call,eq,new,hash 以及item相关的三个方法

    类的内置方法 它与内置函数有紧密的联系,有的内置函数就是调用的内置方法. 在顶级父类obj中有: 两个双下方法 obj.__str__ str(obj) obj.__repr__ repr(obj) ...

  2. python 面向对象 类的内置方法

    判断是不是类cls的对象 class A: pass a = A() print(isinstance(a,A)) 判断类sub是不是super的子类 class A: pass class B(A) ...

  3. python面向对象--类的内置方法

    #isinstance(obj,cls)判断obj是否是类cls的实例 #issubclass(cls,cls1)判断cls是否是cls1的子类或派生类 class Foo: pass class B ...

  4. day28 面向对象:反射,内置函数,类的内置方法

    面向对象进阶博客地址链接: http://www.cnblogs.com/Eva-J/articles/7351812.html 复习昨日内容: # 包 # 开发规范 # # hashlib # 登录 ...

  5. 二十六. Python基础(26)--类的内置特殊属性和方法

    二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...

  6. python学习之老男孩python全栈第九期_day027知识点总结——反射、类的内置方法

    一. 反射 ''' # isinstance class A:pass class B(A):pass a = A() print(isinstance(a,A)) # 判断对象和类的关系 print ...

  7. python基础语法18 类的内置方法(魔法方法),单例模式

    类的内置方法(魔法方法): 凡是在类内部定义,以__开头__结尾的方法,都是类的内置方法,也称之为魔法方法. 类的内置方法,会在某种条件满足下自动触发. 内置方法如下: __new__: 在__ini ...

  8. python -- 类中--内置方法

    isinstance 和  issubclass isinstance(obj,b)  检查是否obj是否是类b的对象 class A(object):pass class B(A):pass b=B ...

  9. 第8.14节 Python类中内置方法__str__详解

    一. object类内置方法__str__和函数str 类的内置方法__str__和内置函数str实际上实现的是同一功能,实际上str调用的就是__str__方法,只是调用方式不同,二者的调用语法如下 ...

  10. 第8.13节 Python类中内置方法__repr__详解

    当我们在交互环境下输入对象时会直接显示对象的信息,交互环境下输入print(对象)或代码中print(对象)也会输出对象的信息,这些输出信息与两个内置方法:__str__方法和__repr__方法有关 ...

随机推荐

  1. linux文件共享之samba,nfs的搭建

    Samba server简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局 ...

  2. Laravel系列 Web

    一.Homestead准备 上一篇文章已经对它的配置进行了说明,下面对Homestead.yaml进行说明 --- ip: "192.168.10.10" memory: 2048 ...

  3. linux epoll用法

    epoll 是 linux 特有的 I/O 复用函数.它是把用户关心的文件描述符事件放在内核的一个事件列表中,故而,无须像select和poll一样每次调用都重复传入文件描述符或事件集.但是, epo ...

  4. 裸机——Nand

    1.首先需要知道Nand的基础知识 从Nand的芯片手册可以获得 我使用的芯片手册是 K9F2G08 首先从芯片手册的名称可以获得信息: K9F:三星 2G   : 2Gb (256MB) 08    ...

  5. Kings(状压DP)

    Description 用字符矩阵来表示一个8x8的棋盘,'.'表示是空格,'P'表示人质,'K'表示骑士.每一步,骑士可以移动到他周围的8个方格中的任意一格.如果你移动到的格子中有人质(即'P'), ...

  6. python基础之装饰器扩展和迭代器

    wraps模块 让原函数保留原来的说明信息 import time import random from functools import wraps def auth(func): '''auth ...

  7. 1,flask简介

    一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不 ...

  8. 15.3,redis持久化RDB与AOF

    redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持久化 ...

  9. [bzoj3371][poj2009][Usaco2004 Mar]Moo University - Emergency Pizza Order 定制比萨饼

    标题这么长的..真是让感觉人头大脚轻. 贴题面先. Description     Moo大学的餐厅必须为$C(1\leq C\leq 1000)$头入学的奶牛新生定制比萨饼.比萨饼可以在比萨小屋订做 ...

  10. 安装macports

    Mac下面除了用dmg.pkg来安装软件外,比较方便的还有用MacPorts来帮助你安装其他应用程序,跟BSD中的ports道理一样.MacPorts就像apt-get.yum一样,可以快速安装些软件 ...