Python继承扩展内置类

内置类型不够用?试试Python内置类型子类化! Python内置类型是语言核心的一部分,它们为开发者提供了基础的数据结构和操作。这些类型包括但不限于int,str,list,dict,tuple, 和set等。每个内置类型都有一系列预定义的行为和方法,使得它们可以直接在程序中使用。 阅读详情

继承最有趣的应用是给内置类添加功能,在之前的Contact类中,我们将联系人添加到所有联系人的列表里,如果想通过名字来搜索,那么就可以在Contact类添加一个方法用于搜索,但是这种方法实际上属于列表本身,我们可以使用继承来做:

class ContactList(list):
    def search(self, name):
        '''Return all contacts that contain the search value
           in their name.'''
        matching_contacts = []
        for contact in self:
            if name in contact.name:
                matching_contacts.append(contact)
        return matching_contacts

class Contact:
    all_contacts = ContactList()
  
    def __init__(self, name, email):
        self.name = name
        self.email = email
        Contact.all_contacts.append(self)

我们创建了一个ContactList来扩展python内置的List,而不是实例化一个普通的列表来作为我们的变量,如下来测试这个新的搜索功能:

>>> c1 = Contact("John A", "johna@example.com")
>>> c2 = Contact("John B", "johnb@example.com")
>>> c3 = Contact("Jenna C", "jennac@example.com")
>>> [c.name for c in Contact.all_contacts.search('John')]
['John A', 'John B']

用[ ]来创建一个空的列表实际上使用list()创建空列表的简化形式,这两种语法是相同的:

>>> [] == list()
True

所以,list这个数据类型像一个我们可以扩展的类,而不像object。类似我们可以扩展dict类,这种创建字段的形式是繁琐的({:}语法)。

class LongNameDict(dict):
    def longest_key(self):
        longest = None
        for key in self:
            if not longest or len(key) > len(longest):
                longest = key
        return longest
#Python小白学习交流群:711312441        

简单测试如下:

>>> longkeys = LongNameDict()
>>> longkeys['hello'] = 1
>>> longkeys['longest yet'] = 5
>>> longkeys['hello2'] = 'world'
>>> longkeys.longest_key()
'longest yet'

大部分的内置数据类型都可以类似的进行扩展,常见的可扩展的数据类型是object、list、set、dict、file以及str。像int和float这些数值偶尔也会做继承。

Python扩展内置类型的实现方法 通过继承和定制化,我们可以对Python的内置类型进行灵活的扩展。在Python中,内置类型(如列表、字典、字符串等)提供了丰富的功能和方法,但有时候我们可能需要对这些类型进行定制化的扩展,以满足特定的需求。扩展内置类型的一种常见方法是通过继承现有的内置类型,并在子类中添加新的方法或修改已有的方法。需要注意的是,在扩展内置类型时,应遵循良好的编程习惯和规范,确保扩展的方法与内置类型的原有功能保持一致,并且在命名上具有清晰的表达意图。通过重写魔术方法,我们可以修改内置类型的行为,实现定制化的扩展。 阅读详情

相关推荐

继承 Python 内置类型的问题及解析

在编程中,继承是一种重要的概念,它允许我们从一个类派生出新的类,并继承原始类的属性和方法。的新类,它使用组合的方式持有内置类型列表的实例。通过这种方式,我们可以在不修改内置类型的情况下,实现我们自己的逻辑,并输出预期的结果。这是因为内置类型的加法操作是在 C 语言级别实现的,而不是在 Python 代码中。为了解决这个问题,我们可以考虑使用其他的方法来实现我们的需求,例如通过定义自己的方法来替代继承的方法。方法,我们可以实现自己的逻辑,并输出预期的结果。在上面的示例中,我们试图继承字典类型,并在。

YabClass的博客 115

Python中常用的内置对象

# Python中常用的内置对象包括: 数字类型、字符串类型、列表类型、元组类型、集合类型、字典类型、函数、模块和文件。 # Python中内置的函数包括: - abs(x):返回x的绝对值。 - bool([x]):返回一个表示x的布尔值,如果x为False、0、空字符串、空列表、空字典、空集合、None,则返回False,否则返回True。

傻傻的心动的博客 2029

配置 NVIDIA RTX 5090 + sm_120 + flashattention,已跑通一个大模型 ~~

本文介绍了在Ubuntu 22.04系统下为NVIDIA RTX 50系显卡搭建深度学习环境的完整流程。重点包括:1)安装适配50系显卡(sm_120架构)的CUDA 12.9驱动和Toolkit,需注意禁用系统自带驱动;2)配置环境变量解决nvcc命令识别问题;3)通过源码编译方式安装支持sm_120的PyTorch nightly版本(cu129),解决官方二进制包不兼容问题。整个过程涉及显卡驱动安装、CUDA环境配置、PyTorch适配等关键步骤,并提供了详细的验证方法和常见问题解决方案。文中特别强调

qq_36674060的博客 6160

Python面向对象——内置对象的功能扩展

1.扩展Python内置类 Python的数据类型 列表(list)、字典(dict)、集合(set)、文件(file)、字符串(str),这些都是对象 扩展list的功能,详解如图: 我们给列表添加了新的功能,搜索功能,能够找出给定字符串是否在列表中,如果在列表中,就返回列表中的字符串。图解如下: 扩展dict的功能,详解如图: 2.代码验证 ...

weixin_30618985的博客 115

基于STM32的智能台灯PWM调光与人体感应融合设计

本文详细介绍了基于STM32单片机的智能台灯设计方案,重点讲解了PWM调光技术与人体感应模块的融合实现。通过STM32的高级定时器产生精准PWM信号控制LED亮度,结合红外传感器实现人来灯亮、人走灯灭的智能体验,同时集成光敏传感实现环境自适应调光,打造高效节能的智能照明解决方案。

threejs5artist的博客 826

告别虚拟机!在Windows上用WSL+VSCode搞定ArduPilot开发环境(保姆级避坑指南)

本文提供了一份详细的保姆级指南,介绍如何在Windows上使用WSL和VSCode搭建高效的ArduPilot开发环境,告别虚拟机性能损耗。从WSL安装、VSCode配置到ArduPilot固件编译和调试技巧,涵盖开发全流程中的关键步骤和常见问题解决方案,帮助无人机开发者快速构建专业级开发环境。

weixin_42543046的博客 461

Python基础——类的继承,重写,拓展

代码片段: # 继承 class RobotOne:#第一代机器人 def __init__(self,year,name): self.year=year self.name=name def walking_on_ground(self): print(self.name+"只能在平地上行走,有障碍物就会摔倒") ...

u014648682的博客 275

BUSCO评估基因组的完整性

因为数据库收集的时候找的就是在不同的物种间都是单拷贝的基因,所以说在评估的物种里面应该也是单拷贝的状态才对。基因组层面评估:先去基因组上预测这些基因,再去做评估,如果说给他是一个注释好的基因集,这个时候提供的是一个蛋白集合,它就直接是去进行同源搜索,再去评估,看BUSCO数据库里面的这些单拷贝基因有或者无;首先,tblastn也是同源搜索,同源搜索之后,去对转录本进行读码框预测,预测完的结果还是去进行hmmsearch的搜索(hmmsearch是做蛋白质结构域搜索的),最终拿到BUSCO评估结果。

qq_64400864的博客 2962

Python继承竟还有这样的玩法?扩展内置类

扩展内置类 我们知道继承是面向对象编程的最重要特征之一。 牧羊犬可以继承自Dog类,就算不写一行代码,就拥有了Dog的基本特征和行为。 中学生可以继承自Student类,自动就拥有了学号,姓名等属性。 除了在自己定义的类中使用继承,我们还可以继承内置类,让内置类更强大,更好用。 list是最常用的内置类,作为一个内置类,它提供了多个好用的方法: 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop',

Yuki1127918的博客 267

【脑电分析系列】第7篇:频域分析基石 — 功率谱密度(PSD)的计算与常见方法对比

本文探讨了脑电图(EEG)频域分析的核心方法——功率谱密度(PSD)。通过对比基于快速傅里叶变换的周期图法和更稳健的Welch's方法,指出后者通过分段、加窗和平均处理,能有效降低估计方差,更适合分析非稳态的脑电信号。文章详细解析了关键参数设置对频率分辨率和统计稳定性的影响,并提供了Python计算实现。PSD分析将复杂的脑电信号转换为直观的频域特征,为研究认知功能和神经疾病提供重要依据。

qq_32516809的博客 1806

骁龙X Elite笔记本重装Windows 11 Arm64系统完整指南与避坑手册

UEFI安全启动和Arm64架构是理解现代计算设备系统部署的基础。UEFI取代传统BIOS,提供了更安全的启动环境和模块化固件接口,而Arm64架构则以其高能效特性,在移动和新兴PC领域日益重要。其技术价值在于为设备带来更快的启动速度、更强的安全防护以及更优的功耗表现。在应用场景上,这直接关系到搭载高通骁龙X Elite等Arm处理器的笔记本电脑的系统安装与维护。对于这类设备,重装系统远非插入通用安装盘那么简单,核心挑战在于必须使用专为Arm64编译的Windows镜像,并需提前集成芯片组、网络等硬件的专属

weixin_33428613的博客 492

python笔记P2篇:可以边敲边学比较详细的笔记(数据结构+异常+类+封装+继承+多态+内置类的继承与扩展)

本文解析Python异常处理与面向对象编程核心代码: 异常处理:通过try-except捕获ValueError等异常,else分离正常逻辑,finally确保资源释放(如文件关闭)。对比主动抛异常与返回值判断的性能差异,建议异常仅用于意外错误。 类与对象:定义Point类演示构造函数__init__初始化属性(如坐标x,y),实例方法通过self访问属性,isinstance()验证对象类型。强调类作为对象蓝图、实例为具体实现的核心思想。 代码示例涵盖错误预防、

qq_55207218的博客 967

Azure AI-102 认证全攻略: (二十八) 设置 Azure AI 服务 API

在本文中,您学习了如何通过 Azure 门户设置和管理 Azure AI 服务,以及如何通过编程方式访问这些服务。在这篇文章中,我们将深入探讨如何设置 Azure AI 服务,特别是如何通过 Azure API 来进行编程访问,以实现自动化和集成。通过本篇文章的学习,您不仅能够顺利完成 Azure AI-102 认证中的 API 配置和集成内容,还能高效地管理和优化 Azure AI 服务,构建稳定、可靠的 AI 应用。在成功设置并测试了 API 后,接下来要管理和维护您的 Azure AI 服务。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1448

Python3【类】继承

继承是面向对象的一个基本准则,继承允许我们在两个或者更多的类之间创建一种关系。 基本继承 从技术上将,每一个Python类的创建都是用了继承,所有的类都是一个叫做object的特殊类的子类。不具体指明的时候,自动继承过来。当然,亦可以通过下面的方式现实的从object类继承。 class MyClass(object): 语法: 在定义一个新的类的时候,在类名的括号里面包含父类的名字就可以了。这样...

Hunter的博客 754

深入详细分析Skyworks 78113 PAMiD射频方案图

是一种高集成度的射频前端模块,它结合了功率放大器(PA)、双工器(Duplexer)、滤波器和开关等多个组件,主要用于4G LTE移动通信系统中的射频前端链路。是一款典型的PAMiD模块,通过将多个频段的发射(TX)和接收(RX)路径集成在一个模块中,大大减少了传统射频设计中的分立器件,同时提高了信号链路的效率和可靠性。模块化设计的优势PCB空间优化:高集成度设计大幅减小了射频电路的尺寸,适用于紧凑型移动设备。减少设计复杂度:模块化设计减少了器件间的匹配与调试工作,加速产品开发周期。性能稳定性。

weixin_43199439的博客 1481

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Python 继承全解析:从内置类型到第三方库的高级应用!!

第三方库的行为。

AI Agent 首席体验官 1230

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

为什么继承 Python 内置类型会出问题?!

△点击上方“Python猫”关注 ,回复“1”领取电子书作者:豌豆花下猫来源:Python猫不久前,Python猫 给大家推荐了一本书《流畅的Python》(点击可跳转阅读),那篇文章有...

Python猫 493

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Python面向对象学习笔记——继承

一、基本继承 从技术上讲,所有的Python类都是一个叫做object的特殊类的子类。它提供了以双下划线开头的方法(仅内部使用),它使Python以同样的方式对待所有对象。 例如: class MySubClass(object): pass 注意:在Python3中,如果我们不提供一个具体的父类,这个类就会自动从object继承。 父类,即是被继承的类;子类,一个从父类继承过来的类。 可以说,子类来源于父类,也可以说,子类扩展了父类。 例如,我们现在命名一个简单的“联系人列表”,且初始化所有联系人于姓

weixin_51871724的博客 536

第4篇:继承基础——单继承、super()与方法重写

摘要: 本文讲解了Python单继承的核心概念与方法重写机制。继承允许子类复用父类属性与方法,并通过super()调用父类构造器或方法。方法重写(Override)使子类能定制自身行为,同时保持多态性。文章演示了继承层次中的属性查找规则,并介绍了isinstance和issubclass的用法。通过员工工资系统的实战案例,展示了继承在薪资计算中的灵活应用。最后指出继承的优缺点,强调合理设计的重要性,避免层次过深或违反里氏替换原则。附有设计车辆类的思考题,帮助巩固继承与多态的应用能力。

ai技术增长的博客 132

python 继承内置类型的问题和解决方案

本章探讨继承和子类化,重点是说明对 Python 而言尤为重要的两个细节: 1,子类化内置类型的缺点 2,多重继承和方法解析顺序 一、子类化内置类型很麻烦 在 Python 2.2 之前,内置类型(如 list 或 dict)不能子类化。在 Python 2.2 之后,内置类 型可以子类化了,但是有个重要的注意事项:内置类型(使用 C 语言编写)不会调用用户定义的类覆盖的特殊方法。 至于内置类型的...

MZP_man的博客 606

python继承与多重继承

记住以下几点: 直接子类化内置类型(如dict,list或str)容易出错,因为内置类型的方法通常会忽略用户覆盖的方法,不要子类化内置类型,用户自定义的类应该继承collections模块. def __setitem__(self, key, value): super().__setitem__(key, ...

weixin_33873846的博客 162

读书笔记:《流畅的Python》第12章 继承的优缺点

# 第12章 继承的优缺点 """ 内容大纲: 继承和子类化 子类化内置类型的缺点 多重继承和方法解析顺序 """ # 子类化内置类型很麻烦 # python 2.2 之前不支持内置类型子类化,之后支持了 # 重要注意事项:使用C编写的内置类型不会调用用户定义的类覆盖的特殊方法 # 例如dict的子类覆盖了__getitem__()方法,不会被内置类型的get()方法调用 # 示例 12-1 内置类型的dict的__init__和__update__方法会忽略.

Morbidmuse的博客 694

【三】当对象是相似的

《Python3面向对象编程》第三章笔记

Jason的博客 1563

Python--面向对象高级(上)

Python 是由吉多・范罗苏姆开发,1991 年发行首个公开发行版的高级编程语言。其语法具有简洁性、解释性、动态类型等特点,数据类型和数据结构丰富,包括整数、字符串、列表、字典等。应用领域广泛,涵盖数据分析与科学计算、人工智能与机器学习、Web 开发、自动化脚本编写等。同时,它拥有庞大且丰富的生态系统,有大量第三方库可扩展功能,还有 PyCharm 等优秀开发工具助力开发。

qq_37107430的博客 458
上一篇: python对象的多重继承
下一篇: python利用subprocess执行交互命令
Python热爱者
博客等级 码龄7年 3057粉丝 1330原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值