类python中高级用法
1. __call__用法
class Foo:def __init__(self):print('init')def __call__(self, *args, **kwargs):print('call')# obj = Foo() # obj() Foo()()
类对象后面加()是执行类中的__call__方法。用处稍后说
2. __int__和__str__方法
class Foo:def __init__(self):passdef __int__(self):return 1111def __str__(self):return 'hello world'obj = Foo() print(obj, type(obj))# int,对象,自动执行对象的 __int__方法,并将返回值赋值给int对象 r = int(obj) print(r) i = str(obj) print(i)
class Foo:
def __init__(self,n,a):
self.name =n
self.age =a
def __str__(self):
return '%s-%s' %(self.name,self.age,)
obj = Foo('pis', 18)
print(obj) #print(str(obj)) str(obj) obj中__str__,并获取其返回值
3. 运算符重载举例__add__,__del__析构方法
class Foo:def __init__(self, name,age):self.name = nameself.age = agedef __add__(self, other):return Foo(self.name, other.age)def __del__(self):print('析构方法') # 对象被销毁()时,自动执行 obj1 = Foo('hello', 19) obj2 = Foo('world', 66)r = obj1 + obj2 # 两个对象相加时,自动执行第一个对象的的 __add__方法,并且将第二个对象当作参数传递进入 print(r,type(r))
4. __dict__方法查看封装内容
class Foo:def __init__(self, name,age):self.name = nameself.age = ageself.n = 123# obj = Foo('pis', 18) # # d = obj.__dict__ # print(d)# ret = Foo.__dict__ # print(ret)
5. __getitem__,__setitem__,__delitem__
class Foo:def __init__(self, name,age):self.name = nameself.age = agedef __getitem__(self, item):return item+10def __setitem__(self, key, value):print(key,value)def __delitem__(self, key):print(key) li = Foo('pis', 18) r= li[8] # 自动执行li对象的类中的 __getitem__方法,8当作参数传递给item print(r) li[100] = "asdf" del li[999]
class Foo: def __init__(self, name,age): self.name = name self.age = age def __getitem__(self, item): # return item+10 # 如果item是基本类型:int,str,索引获取 # slice对象的话,切片 if type(item) == slice: print('调用这希望内部做切片处理') print(item.start) print(item.stop) print(item.step) else: print('调用这希望内部做索引处理') def __setitem__(self, key, value): print(key,value) def __delitem__(self, key): print(key) li = Foo('pis', 18)li[123]li[1:4]
6. __iter__方法
class Foo:def __init__(self, name,age):self.name = nameself.age = agedef __iter__(self):return iter([11,22,33]) li = Foo('pis', 18) # 如果类中有 __iter__ 方法,将对象=》可迭代对象,没有则报错 # 对象.__iter__() 的返回值: 迭代器 # for 循环,迭代器,next # for 循环,可迭代对象,对象.__iter__(),迭代器,next # 1、执行li对象的类F类中的 __iter__方法,并获取其返回值 # 2、循环上一步中返回的对象 for i in li:print(i) """
7. metaclass 作用
class MyType(type):def __init__(self,*args, **kwargs):# self=Fooprint(123)passdef __call__(self, *args, **kwargs):# self=Foor = self.__new__()self.__init__()# class Foo(object,metaclass=MyType):def __init__(self):passdef __new__(cls, *args, **kwargs):return '对象'def func(self):print('hello world')obj = Foo()
在创建类时,obj为Foo对象,而Foo为metaclass对象,默认为type,即metaclass=type,可以用自己创建的类为metaclass,继承type后加上自己的内容即可。
我们看到的是创建对象时直接执行__init__(),实际上Foo是type的对象,先执行type的__init__,
然后Foo(),由上面知道是执行type中的__call__方法。在__call__方法中创建的对象,也就是Foo类的__new__和__init__。
转载于:https://www.cnblogs.com/MY0213/p/7824769.html
类python中高级用法相关推荐
- python简单定义_python定义类的简单用法
python定义的类使用方法: 使用"obj=类名()"语句将类实例化,然后用"obj.函数名"就可以调用类里面定义的各种函数了 示例如下: 将Bili类实例化 ...
- Python SQLite 用法
Python SQLite 用法 具体可以参考网址 代码: #导入 import sqlite3 #连接库,如果数据库不存在,那么它就会被创建,最后将返回一个数据库对象. # test.db:数据路路 ...
- import的用法python_Python导入模块,Python import用法(超级详细)
Python导入模块,Python import用法(超级详细) 使用 Python 进行编程时,有些功能没必须自己实现,可以借助 Python 现有的标准库或者其他人提供的第三方库.比如说,在前面章 ...
- python with用法
@python with用法 python中with可以明显改进代码友好度,比如: [python] view plaincopyprint? with open('a.txt') as f: pri ...
- Python高级用法总结
Python很棒,它有很多高级用法值得细细思索,学习使用.本文将根据日常使用,总结介绍Python的一组高级特性,包括:列表推导式.迭代器和生成器.装饰器. 列表推导(list comprehensi ...
- 数据库和python的结合_redis数据库及与python交互用法简单示例
本文实例讲述了redis数据库及与python交互用法.分享给大家供大家参考,具体如下: redis数据操作 1.string类型:主要存储字符串 操作 命令 设置键值 set key value 设 ...
- python输出函数是什么_Python中打印函数使用概述,python,print,用法,总结
输出的 print 函数总结: 1. 字符串和数值类型 可以直接输出 print(1) 1 print("Hello World") Hello World 2.变量 无论什么类型 ...
- Python正则表达式用法详解
搞懂 Python 正则表达式用法 作者:枫叶云 来源:见文末 Python 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本 ...
- 技巧 | Python 字典用法详解(超全)
文章目录 1.dict.clear() 2.dict.copy() 3.dict.fromkeys() 4.dict.get() 5.dict.items() 6.dict.keys() 7.dict ...
最新文章
- 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...
- Java try语句的嵌套
- 阿里云-变更备案信息记
- python爬虫利器p_Python爬虫利器五之Selenium的用法
- sql server使用维护计划定时备份完整数据库、差异数据库
- 英特尔发布全新英特尔® INDE 2015工具套件
- 若要调试此模块,请将其项目生成配置更改为“调试”模式。若要取消显示此消息,请禁用“启动时若没有用户代码则发出警告”调试器选项。...
- 软件测试—如何建立软件测试管理体系?
- VMware Workstation下载和安装
- 药库管理系统登录界面设计
- RainMeter — 使用 NotePad ++ 编辑皮肤文件
- 日常英语---九、冒险岛link技能导读
- 将DVD中的VOB文件无损转换为MP4等常用视频格式的方法
- 整站SEO优化方案:整站优化的方案的流行格式
- 【历史上的今天】4 月 18 日:第一款交互式电子游戏;IBM 率先研发兆位芯片;硬件公司 Roland 成立
- 巴巴腾机器人视频_巴巴腾机器人,没想到你是这样的机器人!
- 复旦大学有计算机网络专业,复旦大学计算机网络专业计划..doc
- python msp_MSP系统使用python语言实现接口自动化
- 山西计算机一级考试试题,2014山西省计算机等级考试试题 二级C试题一点通科目一...
- 【技术科普一】什么是石墨烯技术?
热门文章
- [转]使用Visual C#制作可伸缩个性化窗体
- 【Java】Java中的在Linux和Mac以及Windows上使用File.separator的坑
- c语言case语句块,JavaScript使用Switch语句来选择将要执行的代码块
- oracle进入rman报错,Oracle学习系列之Rman学习(三)
- php7 mcrypt模块_Linux下PHP安装mcrypt扩展模块笔记
- 一次有趣的面试经历,当前端面试碰到后端面试官会发生什么?
- JavaSE01、如何写一个Java代码
- 自定义类型详解:结构体(内存对齐、位段) + 枚举 + 联合
- kafka 修改分区_kafka修改分区和副本数
- python可以操作word吗_python实现在windows下操作word的方法