相关内容:

__del__、__doc__、__dict__、__module__、__getitem__、__setitem__、__delitem__、__str__、__repr__、__call__

首发:posted @ 2018-02-07 01:08

修改:

  1. 2018-02-14 13:57:增加__repr__

__del__:

  • 被称为析构函数
  • 当删除一个对象时,python解释器会默认调用__del__()方法
import gc
class Dog(object):
def __init__(self,name):
self.name=name
def __del__(self):
print("删除成功")
def wang(self):
print("汪汪汪") d1=Dog("小黑")
d1.wang()
# d1=None
# del d1
#以上两种都可以删除,或者程序结束也会释放内存 # d1.wang()#删除后这里会报错

__doc__ :

  • 类的文档字符串
class Dog:
"""这是这个类的说明
"""
def __init__(self,name):
self.name=name d1=Dog("奥巴马")##创建对象,传入__init__所需的变量,self默认自动传入 print(Dog.__doc__) --------------------------
结果:
这是这个类的说明

__dict__ :

  • 类的属性,包含类的相关变量和方法
class Dog:
#self 代表的是类的实例,代表当前对象的地址
def __init__(self,name):##称为类的构造函数,进行初始化成员变量
self.name=name
def bulk(self):###自定义函数
print("%s:汪汪!"%self.name) d1=Dog("奥巴马")##创建对象,传入__init__所需的变量,self默认自动传入 print(Dog.__dict__)###类相关的变量,函数
print(d1.__dict__)##只有自身的实例变量 -----------------------------------------
{'__module__': '__main__', '__init__': <function Dog.__init__ at 0x000002B6950FC9D8>, 'bulk': <function Dog.bulk at 0x000002B6950FCA60>, '__dict__': <attribute '__dict__' of 'Dog' objects>, '__weakref__': <attribute '__weakref__' of 'Dog' objects>, '__doc__': None}
{'name': '奥巴马'}

__module__:

  • 类定义所在的模块:源文件中会显示__main__,导入为模块时为类定义所在的模块

__getitem__:

  • 凡是在类中定义了这个__getitem__ 方法,那么它的实例对象(假定为p),可以像这样 p[key] 取值,当实例对象做p[key] 运算时,会调用类中的方法__getitem__。

__setitem__:

  • 使对象可以使用obj[key]=value来调用__setitem__进行操作

__delitem__:

  • 使对象可以使用del obj[key]来删除属性

class A(object):
def __getitem__(self, key):
print('__getitem__', key)
def __setitem__(self, key, value):
self.value=value
print('__setitem__', key, value)
def __delitem__(self, key):
print('__delitem__', key) obj = A() result = obj['k1'] # 触发__getitem__
obj['k2'] = 'neo' # 触发__setitem__
print(obj.value) #设置的可以获取
del obj['k1'] #触发__delitem__


__str__:

  • 直接调用对象时,显示的字符串

class Dog(object):
def __init__(self,name):
self.name=name
def __str__(self):
return self.name
d=Dog("apple")
print(d)
class Dog(object):
def __init__(self,name):
self.name=name
def __str__(self):
return "这是一个?"
d=Dog("apple")
print(d)

__repr__:

  • __repr__与__str__的功能基本一致,不同的是,在交互式环境中,直接输入类的一个实例对象也能得到结果。
  • 而如果类中没有定义__str__,那么此时__repr__就相当于__str__
  • 而基本上,repr的功能使用较少,主要用于debug,其他情况都可以使用__str__来代替
>>> class Dog(object):
def __init__(self,name):
self.name=name
# def __str__(self):
# return "这是一个?"
def __repr__(self):
return "这是一个?" >>> d=Dog("apple")
>>> d
这是一个?
>>> print(d)#没有__str__的情况
这是一个?

__call__:

  • 一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。

class call_test(object):
def __call__(self, *args, **kwargs):
print("hello ",args,kwargs) c=call_test()
c()

9.4、__del__、__doc__、__dict__、__module__、__getitem__、__setitem__、__delitem__、__str__、__repr__、__call__的更多相关文章

  1. python 全栈开发,Day24(复习,__str__和__repr__,__format__,__call__,__eq__,__del__,__new__,item系列)

    反射: 使用字符串数据类型的变量名来使用变量 wwwh即what,where,why,how  这4点是一种学习方法 反射 :使用字符串数据类型的变量名来使用变量 1.文件中存储的都是字符串 2.网络 ...

  2. python全栈开发day23-面向对象高级:反射(getattr、hasattr、setattr、delattr)、__call__、__len__、__str__、__repr__、__hash__、__eq__、isinstance、issubclass

    一.今日内容总结 1.反射 使用字符串数据类型的变量名来操作一个变量的值. #使用反射获取某个命名空间中的值, #需要 #有一个变量指向这个命名空间 #字符串数据类型的名字 #再使用getattr获取 ...

  3. python的__call__、__str__、__repr__、__init__、__class__、__name___、__all__、__doc__、__del__等魔术方法的作用

    python中,一切都是对象 在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”--魔术方法 1.__call__:作用是把类实例变成一个可调用对象 在Pyth ...

  4. 内置函数补充,__str__方法、__del__方法 和 __call__方法和元祖

    一 .内置函数补充 1.isinstance函数: isinstance(obj,cls)检查obj是否是类 cls 的对象 使用该函数来判断一个函数的类型 2. issubclass(sub, su ...

  5. 内置函数、反射、__str__、__del__、元类

    一.内置函数的补充 isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo: pass obj=Foo() print(isinstance(obj,Foo) ...

  6. Python基础(18)_面向对象程序设计2(反射、__str__、__del__、__item__系列)

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object) ...

  7. Python进阶-XVIV 类的内置方法:__str__ 、__repr__、析构函数(__del__)、双下的call,eq,new,hash 以及item相关的三个方法

    类的内置方法 它与内置函数有紧密的联系,有的内置函数就是调用的内置方法. 在顶级父类obj中有: 两个双下方法 obj.__str__ str(obj) obj.__repr__ repr(obj) ...

  8. 1、__del__ 2、item系列 3、__hash__ 4、__eq__

    1.__del__   析构方法       释放一个空间之前之前 垃圾回收机制   2.item系列   和对象使用[ ]访问值有联系 __getitem__ __setitem__ __delit ...

  9. python中__init__()、__new__()、__call__()、__del__()几个魔法方法的用法

    关于__new__()的用法参考: http://www.myhack58.com/Article/68/2014/48183.htm 正文: 一.__new__()的用法: __new__()是在新 ...

随机推荐

  1. ubuntu 16.04下使用 python pip的安装问题。

    ubuntu 16.04使用 pip安装软件时,不知道为什么不能使用sudo pip install XXX 需要使用的是:python -m pip install XXX才可以.

  2. Python项目代码结构

    目录结构组织方式 简要解释一下: bin/: 存放项目的一些可执行文件,当然你可以起名script/之类的也行. luffy/: 存放项目的所有源代码.(1) 源代码中的所有模块.包都应该放在此目录. ...

  3. [每天解决一问题系列 - 0011] 如何清除Windows中的Icon缓存

    问题描述: 当更换一个应用或者快捷方式的图标后,会看到图标并没有及时更新 问题原因: 原因是Windows为了使图标显示更快,做了缓存%localappdata%\IconCache.db 解决方案: ...

  4. Android并发编程 原子类与并发容器

    在Android开发的漫漫长途上的一点感想和记录,如果能给各位看官带来一丝启发或者帮助,那真是极好的. 前言 上一篇博文中,主要说了些线程以及锁的东西,我们大多数的并发开发需求,基本上可以用synch ...

  5. 滴滴工程师带你深入理解 TCP 握手分手全过程

      本文作者:饶全成,中科院计算所硕士,滴滴出行后端研发工程师. 个人主页:https://zhihu.com/people/raoquancheng   记得刚毕业找工作面试的时候,经常会被问到:你 ...

  6. 比Python、Java更快的 Go 语言,能否称霸江湖?

    关注之后加星标,江湖要事早知道 ​ 文章来源:jb51.net 有一种语言堪称比语言排行榜前五热门选手的Python.Java更快,它就是GO语言. Go于2009年11月正式宣布推出,成为开放源代码 ...

  7. 关于dao层的封装和前端分页的结合(文章有点长,耐心点哦)

    任何一个封装讲究的是,实用,多状态.Action:     任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数.并根据这个参数进行查值. 然 ...

  8. Kafka实战-实时日志统计流程

    1.概述 在<Kafka实战-简单示例>一文中给大家介绍来Kafka的简单示例,演示了如何编写Kafka的代码去生产数据和消费数据,今天给大家介绍如何去整合一个完整的项目,本篇博客我打算为 ...

  9. EOS行为核心:解析插件chain_plugin

    EOS提供了大量的rpc接口,其中功能性最强,使用最频繁的一部分接口是EOS的行为核心,由chain_api_plugin提供,具体实现是在chain_plugin. 关键字:EOS,区块链,chai ...

  10. javascript中 Function.prototype.apply()与Function.prototype.call() 对比详解

    Function.prototype.apply()|Function.prototype.call() apply()方法可以在使用一个指定的 this 值和一个参数数组(或类数组对象)的前提下调用 ...