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 ...
随机推荐
- 主席树----POJ 2104(主席树裸题)(转)
首先来介绍一下我们需求:给你n个数,多次问你某个区间内的第k小是哪个数 主席树: 主席树的全名应该是 函数式版本的线段树.加上附带的一堆 technology.. ..总之由于原名字太长了,而且 “主 ...
- aodh M版本新特性 - Remove eventlet from Aodh in favour of threaded approach
在 Kilo版本, API WSGI application 可以有以下2种部署方式: As a Python command that runs a Werkzeug-based web serve ...
- 1、html(),text(),value()的区别;2、remove() 3、加载完执行函数
1 .html()用为读取和修改元素的HTML标签.2 .text()用来读取或修改元素的纯文本内容.3 .val()用来读取或修改表单元素的value值. 这三个方法功能上的对比 .html() ...
- 免费获得 NTFS for Mac 12. Special Edition 激活码活动
进入页面:http://www.paragon-drivers.com/cn/ntfs-mac-free/ntfs-free.html 先点击“下载”按钮,下载 NTFS for Mac 12. Sp ...
- 51nod 1732 LCS变形
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1732 1732 51nod婚姻介绍所 题目来源: 原创 基准时间限制:1 ...
- mac 上 mamp 配置虚拟主机 具体过程 ?
https://www.zhihu.com/question/32320396 mac 上 mamp 配置虚拟主机 具体过程 ? 按照哪些配置什么的 都搞好了 但是还不好 配置的主机 制定的目录 还是 ...
- @angular/cli项目构建--Dynamic.Form(2)
form-item-control.service.ts update @Injectable() export class FormItemControlService { constructor( ...
- 延时并自动关闭MessageBox
信息提示框(MessageBox)是微软NET自带的一个用于弹出警告.错误或者讯息一类的“模式”对话框.此类对话框一旦开启,则后台窗体无法再被激活(除非当前的MessageBox被点击或者关闭取消). ...
- php mysql 查询
抓取结果集对象中数据并且转换数组 $row = mysqli_fetch_assoc(结果集对象); 从结果集对象中抓取一行记录->转换关联数组 $row = mysqli_fetch_row( ...
- C# WebApi 配置复杂路由不生效的问题
配置复杂路由不生效是由于优先级的关系,应该把默认路由放在最后. config.Routes.MapHttpRoute( name: "DynamicApi", routeTempl ...