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 ...
随机推荐
- 【P2158】仪仗队&欧拉函数详解
来一道数论题吧. 这个题一眼看上去思路明确,应该是数论,但是推导公式的时候却出了问题,根本看不出来有什么规律.看了马佬题解明白了这么个规律貌似叫做欧拉函数,于是就去百度学习了一下这东西. 欧拉函数的含 ...
- Spring初学之spring的事务管理注解
spring的事务管理,本文的例子是:比如你需要网购一本书,卖书的那一方有库存量以及书的价格,你有账户余额.回想我们在编程中要实现买书这样的功能,由于你的账户表和书的库存量表肯定不是同一张数据库表,所 ...
- 通过yum安装mysql
在linux中安装数据库首选MySQL,Mysql数据库的第一个版本就是发行在Linux系统上,其他选择还可以有postgreSQL,oracle等 在Linux上安装mysql数据库,我们可以去其官 ...
- IDEA运行debug为灰色无法运行
这种情况一般在使用他人项目的时候产生. 检查几个问题,本地环境是否配置好 然后进入项目的入口右键运行是否可以正常运行 如果不可以,就在 修改一下src文件 一般就可以正常使用了
- 写hibernate.cfg.xml时报错The content of element type "property" must match "(meta*,(column|formula)*,type?)".
原配置文件是这样的 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-ma ...
- mysql数据库优化课程---3、数据库设计是什么
mysql数据库优化课程---3.数据库设计是什么 一.总结 一句话总结: 就是设计各个字段及各个字段类型 1.char,varchar,text同存'ABC'的存储空间为多少? char(255): ...
- ipconfig | find /i "ipv4"
C:\Users\Bob>ipconfig|find /i "IPv" 本地链接 IPv6 地址. . . . . . . . : fe80::d495:6e3:6368 ...
- 弹框内画echarts图dom元素无法获取的问题
弹框内画echarts图dom元素无法获取的问题? 什么意思呢?就是当我们打开弹框之后,此时要画eachars图,可是echarts图的容器dom此时为null, 因此我们需要做的就是在dom元素获取 ...
- 移动端rem设置,自动更改html<font-size>
<script> (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchang ...
- Sunday算法
Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配.其核心思想是:在匹配过程中,模式串发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配,从而提高了匹配效率 ...