一、概述

前面我们讲了类的方法,有普通方法,就是我们自己定义的方法,还有静态方法,类方法,属性方法,

其实还有另一类方法,叫做类的特殊成员方法

二、类的特殊成员方法

2.1 __doc__  ,表示类的描述信息

class Dog(object):

'''

dog class #__doc__ 就是打印这里的信息

'''

def __init__(self,name):

self.name=name

self.age=None

self.__sex=None

def walk(self):

print("%s is walking..." %self.name)

d=Dog("niubi")

print(d.__doc__)

-----输出----

dog class

2.2 __module__和__class__

说明:

作用:当多次引用的时候,查看是从哪里导入的。没啥卵用

__module__: 表示当前操作的对象在哪个模块

__class__:表示当前操作的对象的类是什么

2.3 __init__

说明:构造方法,通过类创建对象时,自动触发执行

2.4 __del__

说明:析构方法,当对象在内存中被释放时,自动触发执行

2.5__call__

class Foo(object):

def __init__(self):

self.name = "nb"

def __call__(self, *args, **kwargs): # 重写call方法

print("running call", args, kwargs)

f = Foo() # 执行__init__

f(1, 2, 3, name="nb") # 执行call方法,也可以写成 Foo()(1,2,3,name="nb")

---

running call (1, 2, 3) {'name': 'nb'}

2.6__dict__  ,挺有用

类.__dict__ 查看类中所有方法成员

class Dog(object):

'''

dog class

'''

def __init__(self,name):

self.name=name

self.age=None

self.__sex=None

def walk(self):

print("%s is walking..." %self.name)

def eat(self,food):

print("%s is eating %s" %(self.name,food))

def age(self,age):

self.age=age

def sex(self):

return self.__sex

d=Dog("NIUBI")

print(Dog.__dict__)

=======

{'__module__': '__main__', '__doc__': '\n dog class\n ', '__init__': , 'walk': , 'eat': , 'age': , 'sex': , '__dict__': , '__weakref__': }

实例.__dict__  :打印出类中所有属性,不包括类属性。

class Dog(object):

'''

dog class

'''

class_shuxing="hehe" #这个类属性没有被打印出来

def __init__(self,name):

self.name=name

self.age=None

self.__sex=None

def walk(self):

print("%s is walking..." %self.name)

def eat(self,food):

print("%s is eating %s" %(self.name,food))

def age(self,age):

self.age=age

def sex(self):

return self.__sex

d=Dog("NIUBI")

#print(Dog.__dict__)

print(d.__dict__)

==============

{'name': 'NIUBI', 'age': None, '_Dog__sex': None}

#不包括类属性

2.7 __str__  ,

如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值 ,据说 Djiango 中很长用,以后详解

class test(object):

def __init__(self,name):

self.name=name

def __str__(self):

return "".format(self.name)

d=test("hehe")

print(d)

--------------

2.8  __getitem__、__setitem__、__delitem__

说明:用于索引操作,如字典。以上分别表示获取、设置、删除数据

作用:据说可以用类封装一些东西,然后暴露给用户一个字典,在类中控制用户对字典操作的权限。

class test(object):

def __getitem__(self, item):

print("getitem",item)

def __setitem__(self, key, value):

print("setitem",key,value)

def __delitem__(self, key):

print("delete",key)

t=test()

t["name"]

t["name"]="nb"

del t["name"]

-----------------

getitem name

setitem name nb

delete name #注:这边的__delitem__没有做真正的删除,只是触发这个方法,想要真正删除,只需要在__delitem__函数中添加删除功能即可

python成员方法共享吗_python 入坑路 类的特殊成员方法相关推荐

  1. java学习路线_java学习路线_我的入坑路

    java详细路线: 网上有很多学习路线,当初,我就是受这个学习路线的影响入坑的. 既然看到标题为我的java学习路,那就给大家看下我是怎么走过来的. 阶段一_JavaSE 入门推荐书:java开发实战 ...

  2. python多进程共享内存_python 进程间通信 共享内存

    python多进程通信实例分析 python多进程通信实例分析操作系统会为每一个创建的进程分配一个独立的地址空间,不同进程的地址空间是完全隔离的,因此如果不加其他的措施,他们完全感觉不到彼此的存在.那 ...

  3. python进程共享内存_Python进程间通信之共享内存

    前一篇博客说了怎样通过命名管道实现进程间通信,但是要在windows是使用命名管道,需要使用python调研windows api,太麻烦,于是想到是不是可以通过共享内存的方式来实现.查了一下,Pyt ...

  4. python 有趣的变量_Python进阶之路 3.2有趣的赋值操作

    3.2 有趣的赋值操作 赋值操作是再简单不过了,在前面的章节也多次使用了赋值操作.不过Python语言中的赋值操作要有趣得多.例如,可以同时将多个值赋给多个变量. x,y,z = 1,2,3 prin ...

  5. python写前端代码_python学习之路前端-JavaScript

    JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ...

  6. python多线程共享全局变量_Python多线程-共享全局变量

    多线程-共享全局变量 import threading import time g_num = 200 def test1(): global g_num for i in range(5): g_n ...

  7. python range 步长为负数_Python入门第7课,循环结构学习,for语句range函数的3种用法...

    上课前,大陈带领学生们一起回顾和梳理前面学过的知识. 体验课,Python与人工智能初体验. 第1课,输出语句及赋值语句. 第2课,输入语句学习. 第3课.第4课,学习条件控制if语句. 第5课.第6 ...

  8. python循环5次_Python自学之路五:分支,循环,迭代

    一.条件分支语句if 到目前为止,我们几乎一直在讨论数据结构.现在,我们将开始探讨代码结构.下面第一个例子是应该Python小程序,判断一个布尔变量a的值,然后打印输出合适的取值: a = True ...

  9. 三级python考试难吗_Python自学之路:三级菜单

    要求1: 1.运行程序输出一级菜单: 2.选择一级菜单某项,输出二级菜单,依次同理输出. 要求2: 只用一层循环完成 代码主要内容: 1.while循环.continue.break使用 2.if判断 ...

最新文章

  1. python商业爬虫_商业爬虫学习笔记day1
  2. TopCoder-SRM632-DIV1-300pt-PotentialArithmeticSequence-归纳推理+枚举
  3. CentOS7——vi编辑保存
  4. gorm物理删除:unscoped用法
  5. php操作xml文件,php xml文件操作代码(一)
  6. JLink接口的SWD接法
  7. 由《我也能做CTO》引起的作者与读者的交流
  8. “Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常
  9. 真正的mybatis_redis二级缓存
  10. 覆盖7大手机品牌近4亿安卓用户 “互传联盟”让分享更容易
  11. python 股票指标库talib_Talib金融库的使用
  12. pip install 报语法错误
  13. 对拍--from Altf4
  14. 我的大学-5-34-林陆
  15. Oracle创建和查询索引
  16. 关于Protel 2004 绘制电路原理图——遇到的一些小问题
  17. 【iconfont图标】vue引入并使用阿里巴巴iconfont图标流程【uniapp引入iconfont真机APP不显示问题解决,移动端引入报错解决】
  18. May 7th, 10:00-11:00 am 1303, Schrodinger Maps (III) by Ioan Bejenaru
  19. 小程序---365笔记第11天---微信小程序登录接入
  20. 20 | 面向流水线的指令设计(上):一心多用的现代CPU

热门文章

  1. oracle 压测工具 ld,Oracle压力测试工具使用说明
  2. java中public_java中public class与class的区别详解
  3. QFile练习(20200213)
  4. 使用caffe训练faster-rcnn时遇到的问题总结
  5. faster_rcnn c++版本的 caffe 封装,动态库(2)
  6. Linux驱动编程 step-by-step (七) 并发 竞态 (信号量与自旋锁)
  7. 企业应用开发(4)(补充)--需求说明文档
  8. 二十年后的回眸(2)——顺风顺水的前三年
  9. Linux学习第二步(Java环境安装)
  10. 制作openstack Centos镜像 -- Example: CentOS image