9.4、__del__、__doc__、__dict__、__module__、…
2018-06-18 01:13:21来源:未知 阅读 ()
相关内容:
__del__、__doc__、__dict__、__module__、__getitem__、__setitem__、__delitem__、__str__、__repr__、__call__
首发:posted @ 2018-02-07 01:08
修改:
- 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()
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:让Python输出更漂亮
- Django model 字段类型及选项解析 2019-07-24
- docker学习记录 2019-07-24
- python 之 面向对象(反射、__str__、__del__) 2019-07-24
- 多线性方程组迭代算法——Gauss-Seidel迭代算法的Python实现 2019-07-24
- win7 docker安装文件及安装问题 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash