• __doc__

用来表示类的描述信息

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
'''这个类是用来描述人的'''
def __init__(self,name,age):
self.name = name
self.age =age if __name__ == '__main__':
p = Person('John',22)
print(p.__doc__)

运行结果

  • __class__

用来表示当前对象的类

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
'''这个类是用来描述人的'''
def __init__(self,name,age):
self.name = name
self.age =age if __name__ == '__main__':
p = Person('John',22)
print(p.__class__)

运行结果

当前程序的Person类

  • __module__

用来表示当前操作对象所在的模块

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
'''这个类是用来描述人的'''
def __init__(self,name,age):
self.name = name
self.age =age if __name__ == '__main__':
p = Person('John',22)
print(p.__module__)

运行结果

  • __call__

实例化的对象后加上括号,来执行该方法

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
'''这个类是用来描述人的'''
def __init__(self,name,age):
self.name = name
self.age =age def __call__(self, *args, **kwargs):
print("Test For Class") if __name__ == '__main__':
p = Person('John',22)
p()

运行结果

如果没有定义该方法,直接调用实例化的对象就会报错

  • __str__

打印对象时,将会打印该方法的返回值

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
'''这个类是用来描述人的'''
def __init__(self,name,age):
self.name = name
self.age =age if __name__ == '__main__':
p = Person('John',22)
print(p)

运行

如果没有定义__str__方法,直接打印对象的话,就会返回该对象的内存地址

如果有定义__str__方法的话

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
'''这个类是用来描述人的'''
def __init__(self,name,age):
self.name = name
self.age =age def __str__(self):
return "The Person Class" if __name__ == '__main__':
p = Person('John',22)
print(p)

运行

打印的不是对象的内存地址,而是__str__方法的返回值

  • __dict__

用来查看类或对象中所有的成员,以字典的格式来表示

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
'''这个类是用来描述人的'''
def __init__(self,name,age):
self.name = name
self.age =age def __str__(self):
return "The Person Class" if __name__ == '__main__':
p = Person('John',22)
print(Person.__dict__)
print(p.__dict__)

运行结果

  • __setitem__,__getitem__,__delitem__

把一个实例“变成”字典

__setitem__为设置,__getitem__为获取,__delitem__为删除

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
'''这个类是用来描述人的'''
def __init__(self):
self.info = {} def __getitem__(self, key):
print("getitem:", key)
return self.info.get(key) def __setitem__(self, key, value):
print("setitem:", key, value)
self.info[key] = value def __delitem__(self, key):
print("delitem:", key) if __name__ == '__main__':
p = Person()
p['name'] = 'John' #触发执行__setitem__
p['age'] = 22
print(p['name']) #触发执行__getitem__
del p['age'] #触发执行__delitem__,可在__delitem__方法中设置删除

运行

如果设置值的话,就会执行__setitem__方法

如果获取值的话,就会执行__getitem__方法

如果删除值的话,就会执行__delitem__方法

  • __new__

类通过__new__方法来进行实例化,__new__方法在内部调用了__init__方法

通常是不需要写__new__方法的,如果写了,就是重构__new__方法,需要继承父类的__new__方法才能实例化对象

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
def __init__(self, name):
self.name = name
print("init") def __new__(cls, *args, **kwargs):
print("new")
print(cls) #打印的为Person类的内存对象
return object.__new__(cls) #继承父类的__new__方法 if __name__ == '__main__':
p = Person('John')

执行结果

可以看到,是先执行__new__方法,再执行__init__方法的

Python类(七)-类的特殊成员方法的更多相关文章

  1. python 零散记录(七)(下) 新式类 旧式类 多继承 mro 类属性 对象属性

    python新式类 旧式类: python2.2之前的类称为旧式类,之后的为新式类.在各自版本中默认声明的类就是各自的新式类或旧式类,但在2.2中声明新式类要手动标明: 这是旧式类为了声明为新式类的方 ...

  2. python第三十六天-----类中的特殊成员方法

    __doc__ 查看尖的描述信息 __module__表示当前操作的对象所在的模块 __class__表示当前操作的对象所属的类 __init__构造方法 通过类创建对象自动执行 __del__析构方 ...

  3. python学习笔记(七) 类和pygame实现打飞机游戏

    python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = ...

  4. 11.python描述符---类的装饰器---@property

    描述符1.描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()这三个内置方法中的一个,描述符也被称为描述符协议(1):__ ...

  5. 4、Python中的类详解(0601)

    <大话数据结构>的作者程杰在博客园也有博客,网址是:http://cj723.cnblogs.com/ 面向对象编程(OOP) 1.程序 = 指令 + 数据 代码可以选择以指令为核心或以数 ...

  6. python入门17 类和对象

    类:一类事物的抽象化.概念: 类的变量(属于类的变量,定义在类的开始处)  成员变量(self.变量) 类的方法( @classmethod,cls参数)   成员方法( self参数 )  静态方法 ...

  7. python:类1——类和对象基础

    一.OO = Object Oriented 面向对象 OOP面向对象编程.OOA面向对象分析.OOD面向对象设计 二.属性+方法——>类(数据和函数) class Turtle(): #类名约 ...

  8. Python 函数和类

    python作为一个面向对象的语言,也有类似java等面向对象语言相同的数据结构(class)的定义,和代码块数据结构定义"函数".为了极大可能的简化代码调用逻辑和书写规则,pyt ...

  9. GO-结构体(类似python中的类)

    一.结构体有名属性 package main import "fmt" func main(){ type Sb struct { name string //属性名,数据类型 a ...

随机推荐

  1. 从配置maven环境到maven项目的新建

    话不多说,直接入正题. 一.配置maven 环境 首先安装最新版支持javaee的eclipse.我这里下载的版本是eclipse-jee-mars-2-win32-x86_64的新版(我是2017年 ...

  2. 关于接口自动化的那些事 - 基于 Python

    网络请求模拟小技巧 在学习了一段时间的Python语言后,咱也大概对Python的语法和逻辑有了一定的积累,接下来,可以为接口自动化测试开始尝试做一些比较简单的准备工作啦~跟着我一起来来来~ 扩展库r ...

  3. Redis主键失效 - 原理及实现机制

    [数据记录过期源码][http://blog.csdn.net/yuanrxdu/article/details/21233047] [http://blog.jobbole.com/71095/] ...

  4. php实现微信扫码自动登陆与注册功能

    本文实例讲述了php实现微信扫码自动登陆与注册功能.分享给大家供大家参考,具体如下: 微信开发已经是现在程序员必须要掌握的一项基本的技术了,其实做过微信开发的都知道微信接口非常的强大做起来也非常的简单 ...

  5. Xcode Developer Tools

    打开Xcode,执行菜单命令 Xcode - Open Developer Tool - More Developer Tools... 会打开苹果开发者中心的工具下载页面. 这里包含了xcode未安 ...

  6. Red hat linux 下配置Java环境(jdk)

      1.把jdk-6u25-linux-i586-rpm.bin 复制到redhat linux中,放到/usr/java 目录下,该目录是mkdir 的,并chmod 755 jdk-6u25-li ...

  7. ImageSwitcher的简单使用

    测试代码: activity_main.xml: <?xml version="1.0" encoding="utf-8"?> <Linear ...

  8. 分布式_理论_08_Consistent Hash(一致性哈希算法)

    一.前言 五.参考资料 1.分布式理论(八)—— Consistent Hash(一致性哈希算法)

  9. Java_脚本引擎_00_资源帖

    一.精选资料 1.w3cschool—Java 脚本引擎 2.Riding the Nashorn 二.参考资料

  10. spring MVC multipart处理文件上传

    在开发Web应用程序时比较常见的功能之一,就是允许用户利用multipart请求将本地文件上传到服务器,而这正是Grails的坚固基石——Spring MVC其中的一个优势.Spring通过对Serv ...