Python类(七)-类的特殊成员方法
__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类(七)-类的特殊成员方法的更多相关文章
- python 零散记录(七)(下) 新式类 旧式类 多继承 mro 类属性 对象属性
python新式类 旧式类: python2.2之前的类称为旧式类,之后的为新式类.在各自版本中默认声明的类就是各自的新式类或旧式类,但在2.2中声明新式类要手动标明: 这是旧式类为了声明为新式类的方 ...
- python第三十六天-----类中的特殊成员方法
__doc__ 查看尖的描述信息 __module__表示当前操作的对象所在的模块 __class__表示当前操作的对象所属的类 __init__构造方法 通过类创建对象自动执行 __del__析构方 ...
- python学习笔记(七) 类和pygame实现打飞机游戏
python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = ...
- 11.python描述符---类的装饰器---@property
描述符1.描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()这三个内置方法中的一个,描述符也被称为描述符协议(1):__ ...
- 4、Python中的类详解(0601)
<大话数据结构>的作者程杰在博客园也有博客,网址是:http://cj723.cnblogs.com/ 面向对象编程(OOP) 1.程序 = 指令 + 数据 代码可以选择以指令为核心或以数 ...
- python入门17 类和对象
类:一类事物的抽象化.概念: 类的变量(属于类的变量,定义在类的开始处) 成员变量(self.变量) 类的方法( @classmethod,cls参数) 成员方法( self参数 ) 静态方法 ...
- python:类1——类和对象基础
一.OO = Object Oriented 面向对象 OOP面向对象编程.OOA面向对象分析.OOD面向对象设计 二.属性+方法——>类(数据和函数) class Turtle(): #类名约 ...
- Python 函数和类
python作为一个面向对象的语言,也有类似java等面向对象语言相同的数据结构(class)的定义,和代码块数据结构定义"函数".为了极大可能的简化代码调用逻辑和书写规则,pyt ...
- GO-结构体(类似python中的类)
一.结构体有名属性 package main import "fmt" func main(){ type Sb struct { name string //属性名,数据类型 a ...
随机推荐
- 【转】Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
最近项目用到下拉刷新,上来加载更多,这里对PullToRefresh这控件进行了解和使用. 以下内容转载自:http://blog.csdn.net/lmj623565791/article/deta ...
- myEclipse 导入maven项目时报错
1.先右击项目,build Path 查看是否是某个JAR出了错.去掉无用的JAR 以及修改对应的JDK版本 2.检查src源文件,查看是否是源文件出了错.发现,还真的是 导入的包上面,报错:The ...
- hdoj1003--Max Sum
Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum ...
- Neutron新进展|DragonFlow在Mitaka版本中的Roadmap
OpenStack网络在Mitaka版本中将有哪些新变化?1月11日到12日,DragonFlow的PTL——Eran Gampel,Kuryr的PTL——Gal Sagie,和他们的老大从以色列来到 ...
- MFC 去掉CWnd的边框
使用继承CWnd的控件,总是有边框,使用 ModifyStyle(WS_BORDER,0); 不能去掉边框,包括SetWindowLong设置去掉WS_BORDER, 也不行. 最后找到了方法就是M ...
- 教你们在cmd里运行打开游戏,效率很快的。喜欢吧?
第一步安装好的游戏 环境变量 变量值:把刚才复制好粘贴在里面,前面不用删除. 喜欢吧?这招非常好用.
- 应该是实例化对象的没有对属性赋值时,自动赋值为null,但不是空指针对象引用
此时会输出两个null. Users类的实例是myUsers,但是由于javabean的作用范围是page,所以前面页面传送的javabean的设置的属性全部不能接收到.所以对象myUsers属性为自 ...
- KVO与KVC的使用(转)
转自http://www.cnblogs.com/mybkn/archive/2013/05/29/3104166.html KVO: 在看KVO之前,有必要先了解下KVC,即,Key-Value C ...
- 如何安装Microsoft Visual C++6.0
Microsoft Visual C++6.0作为新手C语言编程软件,被大家广为使用,然而许多人为拷贝来的C++6.0安装包如何安装感到苦恼,因此许多同学都是以安装失败,安装不成 功而告终.接下来我就 ...
- BZOJ - 2142 礼物 (扩展Lucas定理)
扩展Lucas定理模板题(貌似这玩意也只能出模板题了吧~~本菜鸡见识鄙薄,有待指正) 原理: https://blog.csdn.net/hqddm1253679098/article/details ...