• __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. JavaScript -- 正则表达式 检验表单提交的内容

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. CSDN_博客__WapPc

    CSDN 博客  手机上的网址 和 PC上的网址,对应关系: 1. 举个例子: 手机上的网址: http://m.blog.csdn.net/article/details?id=7910239 PC ...

  3. Sublime Text3取消自动补全结束标签

    点击首选项——设置-用户——在配置中增加一句:"auto_close_tags": false, 参考来源:豆瓣小组:求解Sublime Text 3怎么取消自动补全结束标签

  4. linux服务器应用NTP配置时间同步

    linux服务器应用NTP配置时间同步 • 为什么建议使用ntpd而不是ntpdate? #####原因很简单,ntpd是步进式的逐渐调整时间,而ntpdate是断点更新,比如现在服务器时间是9.18 ...

  5. java基础篇 -- 常用的日期加减和日期格式化工具类

    平时我们遇到日期的加减,感觉是相当麻烦的,以下是常用的日志加减的方法,包括日的加减.月的加减等,也包括了一些常用的日期格式化,这样在我们以后碰到日期加减的时候会省去很多麻烦,欢迎大神指正和吐槽: pa ...

  6. java重置Timer执行频率

    public class BallUtil { public static Timer fisTimer ; public static void fisStartBall(){ long first ...

  7. 剑指offer--13.二进制中1的个数

    就是猜测试数据没有负数,哈哈 ----------------------------------------------------------------- 时间限制:1秒 空间限制:32768K ...

  8. UVA 11605 Lights inside a 3d Grid

    #include <iostream> #include <stdio.h> #include <cstring> #include <math.h> ...

  9. 【bzoj4987】Tree 树形背包dp

    题目描述 从前有棵树. 找出K个点A1,A2,…,Ak. 使得∑dis(AiAi+1),(1<=i<=K-1)最小. 输入 第一行两个正整数n,k,表示数的顶点数和需要选出的点个数. 接下 ...

  10. C#异步编程(五)异步的同步构造

    异步的同步构造 任何使用了内核模式的线程同步构造,我都不是特别喜欢.因为所有这些基元都会阻塞一个线程的运行.创建线程的代价很大.创建了不用,这于情于理说不通. 创建了reader-writer锁的情况 ...