python类与对象-如何派生内置不可变类型并修其改实例化行为
如何派生内置不可变类型并修其改实例化行为
问题举例
自定义一种新类型的元组,对传入的可迭代对象,我们只保留
其中int类型且值大于0的元素,例如
IntTuple([1, -1, 'abc', 6, ['x', 'y'], 3]) => (1, 6, 3)
如何继承内置tuple实现IntTuple?
分析
对象的初始化有两个部分:__new__和__init__方法,
对于tuple而言,它并没有__init__方法,直接在__new__中初始化
解决思路
继承内置tuple,并实现__new__,在其中修改实例化行为
代码
class IntTuple(tuple):
def __new__(cls, iterable):
# 过滤iterable
f_it = (e for e in iterable if isinstance(e, int) and e > 0)
return super().__new__(cls, f_it) int_t = IntTuple([1, -1, 'abc', 6, ['x', 'y'], 3])
print(int_t)
参考资料:python3实用编程技巧进阶
python类与对象-如何派生内置不可变类型并修其改实例化行为的更多相关文章
- python_如何派生内置不可变类型并修改实例化行为
案例: 我们想要自定义新类型的元组,对传入的可迭代对象我们只保留其中的int类型并且值大于0的元素,如下: [1, -2, 'xxx', 7, [1, 'oo'], 9] >> (1, ...
- python类详细说明、常用内置方法和self的作用
一.类的定义 在Python中,一切皆对象,即便是类本身,也是一种type类型的特殊对象. class Person: def __init__(self, name, age): self.name ...
- python:类2——有关类和对象的BIF内置函数
1.检查.判断 判断一个类是不是另一个类的子类 issubclass(class, classinfo)如果第一个参数是第二个参数的子类.子子类等,返回true 非严格(自己可以认为是自己的子类): ...
- 4月17日 python学习总结 反射、object内置方法、元类
一.反射 下述四个函数是专门用来操作类与对象属性的,如何操作? 通过字符串来操作类与对象的属性,这种操作称为反射 class People: country="China" def ...
- 【python基础语法】OS模块处理文件绝对路径,内置的异常类型、捕获、处理(第9天课堂笔记)
import os """ 通过文件的路径去打开文件 相对路径:相对当前的工作路径去定位文件位置 .:代表当前路径 ..:代表上一级路径(父级路径) 绝对路径:相对于电脑 ...
- 一文讲全了Python 类和对象内容
摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan . Pytho ...
- Python函数04/生成器/推导式/内置函数
Python函数04/生成器/推导式/内置函数 目录 Python函数04/生成器/推导式/内置函数 内容大纲 1.生成器 2.推导式 3.内置函数(一) 4.今日总结 5.今日练习 内容大纲 1.生 ...
- python函数(6):内置函数和匿名函数
我们学了这么多关于函数的知识基本都是自己定义自己使用,那么我们之前用的一些函数并不是我们自己定义的比如说print(),len(),type()等等,它们是哪来的呢? 一.内置函数 由python内部 ...
- python类与对象各个算数运算魔法方法总结
1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...
随机推荐
- 小程序 wx.request
wx.request({ url: 'https://hanwslh5.qcloud.la/weapp/HelloWorld', 对于 GET 方法的数据,会将数据转换成 query string(e ...
- Selenium切换窗口,警告框处理,调用JavaScript代码
多窗口切换 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作. WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切 ...
- Beta(7/7)
鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...
- UVA 536 Tree Recovery 建树+不建树
题意: 给出先序和中序,求后序. 思路: ①建树然后递归输出. //建树的 #include<iostream> #include<cstdio> #include<qu ...
- How to change Eclipse loading image
Eclipse IDE has many customize components, the splash welcome image (purple color loading image) is ...
- React(一)使用脚手架创建React项目
1.安装脚手架 现在使用较多的就是这三种脚手架工具: react-boilerplate react-redux-starter-kit create-react-app 我使用的是第三种,faceb ...
- HTML5_canvas_pen.translate()_
.save() 和 .restore() 除了会保存之前的样式,还会保存之前的坐标轴 pen.translate(x, y); 将画布的 坐标轴原点(0, 0) 从画布的左上角,移动到 (x, y) ...
- ECMA Script 6_模块加载方案 ES6 Module 模块语法_import_export
1. 模块加载方案 commonJS 背景: 历史上,JavaScript 一直没有模块(module)体系, 无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来. 其他语言都有这项功能: ...
- 小程序上拉加载更多数据(onReachBottom)
<!--pages/test/test.wxml--> <block wx:for="{{list}}" wx:key="item.id"&g ...
- linux_grub resue模式恢复
//20190417 今天中午装linux的电脑崩了…… 一开始还以为是什么硬件问题,搞了半天,是更新的时候吧grub启动项弄坏了 行吧,没人教咱就上网搜,搞一下午搞出来了 ============= ...