开始Python -- 抽象化(2)

Python抽象化文件系统操库之pyfilesystem2使用详解 PyFilesystem2是一个强大的Python库,用于抽象化文件系统操作。它提供了一致的接口来操作本地和远程文件系统,使得文件系统操作更简单、更安全、更高效。 阅读详情

4、创建自己的类

l         类是一种类型的对象的抽象,而对象是属于类的实例

l         使用class关键字创建类:

>>> class Person:

...      def setName(self, name):

...               self.name = name

...      def getName(self):       

...               return self.name

...      def greet(self):

...               print "Hello, world! I'm %s." % self.name

...              

l         类中定义的方法(确切的称为绑定方法)会将第一个参数绑定到属于这个类的实例,所以在调用方法时,不需要提供该参数:

>>> foo = Person()

>>> foo.setName('Luke Skywalker')

>>> foo.greet()

Hello, world! I'm Luke Skywalker.

l         在调用setName()方法后,foo对象就有了新创建的name属性(之前是不存在的),可以直接访问:

>>> foo.name

'Luke Skywalker'

>>> foo.name = 'Yoda'

>>> foo.greet()

Hello, world! I'm Yoda.

l         和函数一样,可以使用变量指向方法:

>>> greet = foo.greet

>>> greet()

Hello, world! I'm Yoda.

(1) 类Namespace:类成员可访问的范围

>>> class MemberCounter:

...      members = 0

...      def init(self):

...               MemberCounter.members += 1

...     

l         上面的例子中,members被定义成类范围的变量(类似Java中的static变量),所以可以被所有成员(这里指实例)访问:

>>> m1 = MemberCounter()

>>> m1.init()

>>> MemberCounter.members

1

>>> m2 = MemberCounter()

>>> m2.init()

>>> MemberCounter.members

2

l         同样,实例可以直接访问类变量:

>>> m1.members

2

>>> m2.members

2

l         但是对members赋值不会改变类变量的值,因为这会在实例范围中创建新的变量:

>>> m1.members = 'Two'

>>> m1.members

'Two'

>>> m2.members

2

>>> vars(MemberCounter)

{'__module__': '__main__', 'init': <function init at 0x0100C3B0>, 'members': 2, '__doc__': None}

>>> vars(m1)

{'members': 'Two'}

(2) 私有化(private)

l         Python不直接支持私有化机制,类中方法和属性都是公有的,但可以通过在方法或属性前加“__”(2个下划线)实现私有化:

>>> class Secretive:

...      def __inaccessible(self):

...               print "Bet you can't see me..."

...      def accessible(self):    

...               print "The secret message is:"

...               self.__inaccessible()

...              

>>> s = Secretive()

>>> s.__inaccessible()

Traceback (most recent call last):

  File "<interactive input>", line 1, in ?

AttributeError: Secretive instance has no attribute '__inaccessible'

>>> s.accessible()

The secret message is:

Bet you can't see me...

l         其原理是:Python会将2个下划线转换成“_classname”的形式,因此还是可以访问类的私有方法:

>>> s._Secretive__inaccessible()

Bet you can't see me...

 

5、继承

l         在类名后用“()”将父类名括起:

>>> class Filter:

...      def init(self):

...               self.blocked = []

...      def filter(self, sequence):       

...               return [x for x in sequence if x not in self.blocked]

... 

>>> class SPAMFilter(Filter): # SPAMFilter is a subclass of Filter

...      def init(self): # Overrides init method from Filter superclass

...               self.blocked = ['SPAM']

...       

>>> s = SPAMFilter()

>>> s.init()

>>> s.filter(['SPAM', 'SPAM', 'SPAM', 'SPAM', 'eggs', 'bacon', 'SPAM'])

['eggs', 'bacon']

l         允许多重继承:

>>> class Calculator:

...      def calculate(self, expression):

...               self.value = eval(expression)

...              

>>> class Talker:

...      def talk(self):

...               print 'Hi, my value is', self.value

...              

>>> class TalkingCalculator(Calculator, Talker): pass

...

>>> tc = TalkingCalculator()

>>> tc.calculate('1+2*3')

>>> tc.talk()

Hi, my value is 7

l         要注意的是如果父类中有同名的方法,则前面父类的方法会重载后面父类的方法

(1) 关于继承的函数和全局属性

l         isinstance:检查指定对象是否是指定类的实例

l         issubclass:检查指定类是否是指定类的子类

l         __bases__:获得指定类的父类

l         __class__:获得指定对象的类

>>> isinstance(s, SPAMFilter)

True

>>> issubclass(SPAMFilter, Filter)

True

>>> SPAMFilter.__bases__

(<class __main__.Filter at 0x0100AA50>,)

>>> TalkingCalculator.__bases__

(<class __main__.Calculator at 0x0100A960>, <class __main__.Talker at 0x0100AA80>)

>>> s.__class__

<class __main__.SPAMFilter at 0x0100A660>

 

6、接口

l         Python不同于Java,不需要显式的定义接口,只要要求对象实现指定的方法就可以了

l         下面是一些检查属性的函数和全局属性:

Ø         hasattr:需要的方法是否存在

Ø         getattr:获得指定的方法或属性,不存在则使用缺省值

Ø         setattr:设置指定的属性,如果不存在则新建

Ø         callable:指定属性是否可调用(方法)

Ø         __dict__:获得属性Dictionary

>>> hasattr(tc, 'talk')

True

>>> callable(getattr(tc, 'talk', None))

True

>>> setattr(tc, 'name', 'Mr. Gumby')

>>> tc.name

'Mr. Gumby'

>>> tc.__dict__

{'name': 'Mr. Gumby', 'value': 7}

 

 
个人记录:python的自我理解,抽象化python的编程,使得编程问题变得具体化(一) 个人记录:个人学习的记录 文章目录 前言 一、抽象化模型 二、举例 1.很简单的例子:计算任意数字的相加 2.简单的例子:学生管理系统 总结 前言 刚开始写程序算法时,总是忘记要干什么,基本上复现一篇算法都是看着写。要是完全从零开始,要么是背,要么就是不知道怎么写。直到开始写论文时,发现要是把程序算法抽象化的话,会比较有思路。其实归根溯源就是我们正常编写程序的思路,但是我感觉总结一下后,对以后写程序比较有帮助,而且这个不仅仅只是在写程序上有所帮助 一... 阅读详情

相关推荐

python设计模式(六):桥接模式

桥接,是像一座桥连接两岸,而Python程序设计中的桥接指的是抽象部分和实体部分的连接,简单来说是类和类实例化过称中的连接。 桥接模式通过在类和类实例化中间作用,使其抽象和实现可以独立变化而不互相干扰,这就是桥接模式最大的作用。 核心的思想是通过封装,将一个抽象类的相关参数和方法分别作为桥接类的属性,这样在实例化桥接类后通过修改桥接类的属性,便可以实现抽象和实现之间的独立变化。 class...

python之战 683

Python抽象类

抽象类抽象类描述了相关的一组类的通用的特征和行为。在客户的应用程序中,抽象类是不能正常实例化的,它的子类叫做具体类,这表明它们才是真正用来在客户应用程序中创建对象的类。设计一个AbstractBag类前面我们在Python 基于数组、链表实现的包接口中以不同方法实现了包接口。然后又在Python继承中实现了一个继承ArrayBag类的子类ArraySortedBag类。现在我们需要在ArrayBa...

dta0502的博客 9693

Anthropic零层架构:推理链路去抽象化实践指南

在大模型服务架构演进中,‘推理层抽象’曾是保障稳定性与可观测性的关键中间件,其核心原理是通过协议转换、请求校验和状态管理解耦应用与模型。但随着模型服务SLA提升至99.99%、GPU推理吞吐翻倍,该层的序列化开销、语义失真与扩展锁死等技术代价已远超容错收益,催生‘零层’(Zero Layer)范式——即彻底折叠中间抽象,实现应用直连模型内核。这一转变带来端到端延迟下降、故障点归零与底层指标可观察性增强等显著技术价值,广泛应用于RAG系统、AI Agent编排及私有化部署场景。本文聚焦Anthropic最新落

vanadiumlin 510

Python抽象类,抽象方法实现

python 抽象类、抽象方法的实现           python 没有抽象类、接口的概念,所以要实现这种功能得abc.py 这个类库abc模块提供了一个抽象基类声明协议的机制,并且子类一定要提供了一个符合该协议的实现。           抽象基类提供了一种要求子类实现指定协议的方式,如果一个抽象基类要求

mz02230909mz的博客 1157

投影仿真2.0-模型抽象化

2D CT投影仿真 一、题目 利用给定Shepp-logan头模型图像(256*256的矩阵),利用离散投影方法,编程计算得到如下几何关系下的扇束CT投影: 输入:Shepp-logan图像256×256像素 plt.imshow(initial_data, cmap=plt.cm.gray, vmin=0.98, vmax=1.05) % 画图方法 输出:扇束投影数据矩阵360*300。(因为探测器是360度旋转扫描,每1度一次角度投影,一次可投影到300个探测器点上) 二、计算结果、程序代码 原

MaYuHuaw的博客 457

掌握Python以培养计算思维能力

计算思维是一种解决问题、设计系统和理解人类行为的基本技能,它涉及到问题求解、系统设计以及人类行为理解等方面。在计算思维中,重要的是如何将一个复杂的问题分解成可管理和可解决的小问题,通过逐步求精的方式解决问题。计算思维是一种实用的思维技能,它不仅限于计算机科学家,而是适用于各个领域的人士。通过学习和应用计算思维,我们可以更有效地处理信息,解决问题,并在日常生活中做出明智的决策。计算思维的核心思想包括:分解、模式识别、抽象化和算法设计。

weixin_35732273的博客 810

开始Python -- 抽象化(1)

1、创建自己的函数l         Callable()函数:检查是否可以调用>>> from math import sqrt as x>>> y = 1>>> callable(x)True>>> callable(y)Falsel         创建函数:用def关键字定义,用return语句返回结果def fibs(num):    

Dynamic Script Language 942

海思MPP平台千兆以太网驱动集成与测试指南

千兆以太网(GE)是嵌入式视觉系统中音视频流传输与边缘控制的核心物理接口,其底层驱动需兼顾DMA高效调度、中断实时响应与PHY链路稳定性。在Linux嵌入式环境中,GE驱动通常基于net_device框架实现,并深度耦合于SoC专用媒体处理平台(如海思MPP),通过硬件抽象层(HAL)屏蔽寄存器操作,提供零拷贝、RGMII时序适配、描述符环管理等关键能力。技术价值体现在降低CPU负载、保障1080p@30fps实时推流、支持ONVIF/RTSP协议交互及固件远程升级。典型应用场景包括网络摄像机(IPC)、A

weixin_42599908的博客 90

python之抽象类

1什么是抽象类 与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化 2为什么要有抽象类 如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性。 比如我们有香蕉的类,有苹果的类,有桃子的类,从这些类抽取相同的内容就是水果这个抽象的类,你吃...

weixin_30367945的博客 311

【论文速读】MLDT:基于开源大语言模型的复杂长时机器人任务规划多层次分解方法

—在数据驱动的人工智能技术领域,开源大语言模型(LLMs)在机器人任务规划中的应用是一个重要的里程碑。近期基于开源大语言模型的机器人任务规划方法通常利用大量的任务规划数据集来提升模型的规划能力。虽然这些方法展现出了一定的前景,但它们在处理复杂长时任务时存在困难,因为这类任务需要理解更多的上下文信息并生成更长的动作序列。本文提出多层次分解任务规划方法(MLDT)来解决这一局限性。该方法创新性地在目标级、任务级和动作级对任务进行分解,以应对复杂长时任务带来的挑战。

muyulingfengye的博客 1646

保姆级教程:用NVIDIA Jetson AGX Xavier和GMSL2相机搭建8路车载视觉原型系统

本文提供了一份详细的教程,指导如何使用NVIDIA Jetson AGX Xavier开发板和GMSL2相机搭建8路车载视觉原型系统。内容涵盖硬件选型、系统架构设计、软件环境配置、多路视频采集实现以及性能优化与问题排查,帮助开发者快速掌握GMSL2技术在车载视觉系统中的应用。

weixin_42525005的博客 295

Python之抽象类、抽象方法

Python之抽象类、抽象方法 抽象类中只能有抽象方法,子类继承抽象类时,不能通过实例化使用其抽象方法,必须实现该方法。 Python2 class CopyBase(object): def save(self): raise NotImplementedError class CopyPaper(C...

HarvardFly的博客 683

使用 C# 开发海康设备实时视频流的监控与报警系统

本文介绍了如何使用C#结合海康威视SDK(HCNetSDK)开发安防监控系统,涵盖设备登录、视频流获取、报警处理和云台控制等核心功能。内容包括开发环境配置、系统架构设计、关键代码实现(如设备登录、实时视频播放、报警设置)以及用户界面设计。通过Windows Forms/WPF,开发者可构建完整的监控应用,实现设备管理、视频监控、报警响应等功能。系统采用模块化设计,便于扩展和维护,适用于各类安防场景。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1357

python2中的print语句可以不用小括号。_Python 2 退休,代码该过渡到Python3啦!

Python 2.7 于 2020 年 1 月 1 日正式停止维护,这也意味着 Python 2 完全退休,现在是 Python 3 的时代。Python 之父两年前就已宣布 Python 2.7 将于 2020 年 1 月 1 日终止支持,现在这一天已经到来。Python 社区开发和共享的软件存储中心 Python Package Index(PYPI)的大多数流行软件包现在都可以在 ...

weixin_39823676的博客 392

一文搞懂雷达脉冲压缩和匹配滤波器

为了解决传统单频脉冲雷达面临的作用距离和空间分辨力之间的矛盾,脉冲压缩理论被提出。在接收端设计一个和发射信号能够“共轭匹配”的网络来实现脉冲压缩。接收到的回波信号通过匹配滤波器时,滤波器的增益在信号越强的频率点越大;在信号越弱的频率点,增益越小,通过这样的方式使信号在时域更加集中。脉冲压缩技术大致可分为线性调频(LFM)和相位编码。其中LFM信号易于通过硬件或各种技术产生,但是进行匹配滤波后主旁瓣比高达13.2dB,在检测多个目标时,强目标的回波旁瓣可能会把弱小信号覆盖,导致弱小信号的检测受到影响。

FPGA入门到跑路 9938

IgH EtherCAT 从入门到精通:第 3 章 第一次运行 Hello EtherCAT

摘要:启动EtherCAT主站实践指南 本章详细介绍了如何配置和启动EtherCAT主站系统,主要内容包括: 配置文件详解:讲解/etc/ethercat.conf中的关键配置项,包括主网卡指定、冗余备份设置和网卡驱动选择。 启动流程:说明通过systemd服务和手动命令两种方式加载内核模块,重点介绍了ec_master和ec_generic模块的加载顺序及验证方法。 命令行工具:列举ethercat工具的常用命令,如查看主站状态、扫描从站设备、读取PDO/SDO数据等。 示例程序:简要介绍内核态示例min

从事嵌入式linux android驱动开发,拥有全栈能力 311

python2处理耗时任务_Python 2 退休,代码该过渡到Python3啦!

Python 2.7 于 2020 年 1 月 1 日正式停止维护,这也意味着 Python 2 完全退休,现在是 Python 3 的时代。Python 之父两年前就已宣布 Python 2.7 将于 2020 年 1 月 1 日终止支持,现在这一天已经到来。Python 社区开发和共享的软件存储中心 Python Package Index(PYPI)的大多数流行软件包现在都可以在 ...

weixin_42465885的博客 125

R语言做一个 GM (1,1)灰色预测模型

累加生成是GM(1,1)模型的另一个重要步骤,它通过构造累加生成序列,把非线性非平稳时间序列转化为线性平稳时间序列。GM(1,1)是一种基于灰色系统理论的预测模型,通常用于中小样本的非线性、非平稳时间序列数据分析。灰色预测模型的核心是灰度处理,将原始时间序列转化为灰色时间序列。这里使用R语言中的diff函数对时间序列进行一次差分,然后对结果取累加和得到灰度序列。以上是GM(1,1)灰色预测模型在R语言中的实现步骤。需要注意的是,GM(1,1)模型适用于中小样本的时间序列预测,对于长期预测效果可能较差。

Mrrunsen的博客 3842

Python实现桥接模式

桥接模式:将“抽象化”与“实现化”进行“脱耦”。使得两者可以独立地演化抽象化:存在于多个实体中的共同概念性联系,就是抽象化。比如一组独享如果具有相同的概念性联系,那么它就可以通过一个共同的类来描述,如果一组类具有相同的概念性联系,就可以通过一个抽象类来描述。实现化:抽象化给出具体实现,就是实现化,比如一个类的实例化就是这个类的实现化,一个具体子类就是抽象超类的实现化。脱耦:就是两个实体的行为的某种...

weixin_41431904的博客 1249

RK3588网卡出现丢包或者带宽不足的问题验证排查

注意除了有最大的TCP数据接收缓冲,还有/proc/sys/net/core/wmem_max — 最大的TCP数据发送缓冲可以调整,这里暂时没用到,针对具体需要可适当调整。比如把ethx接口中断从默认的cpu0迁移到其它cpu,例如将eth0中断234移到cpu7 (10是16进制, cpu0 =3588的cpu有8个核,4个A55(小核)+4个A76(大核),可以找到对应中断 将中断从默认cpu0核切到cpu7。tcp_rmem:单位是字节,接收缓存区大小,缓存从对端接收的数据,后续会被应用程序读取。

Android/Linux驱动开发传帮带学习,让驱动入门门槛更低! 2030

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

如果你是Python初学者,就从这个开始

要理解它,我们需要定义抽象化第一。摘要只显示基本特征,而不显示任何背景细节。当然小编这里也准备一份适合你的学习资料爬虫 ,web开发的学习资料视频教程,文末可以免费获取!这些书籍都是可以私信小编“01”免费领取的!例1:自动取款机不会向你展示它如何从背面带来金钱。那是抽象。只显示对用户至关重要的内容。示例2:当您登录到Twitter或任何其他平台时,它将不会向您详细说明您的用户名和密码是如何进行身份验证的,该算法在内部使用哪些变量从数据库中检查它。那是抽象。只显示对用户至关重要的内容。所以,

qq_46094651的博客 111

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python 基础课程收官总结

课程总结首先用英文来总结一下整套课程的核心知识点。当我学习新知识时,我喜欢用下面四种方法学(不止一次强调)系统化(systematize)零散知识来融会贯通(connect the d...

weixin_38753422的博客 423

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

精品课 - Python 基础

个人简历王圣元(FRM, CAIA)新加坡某金融咨询公司总监新加坡国立大学金融数学硕士新加坡国立大学量化金融学士《快乐机器学习》的作者《Python - 金工, 机学, 可视化》(已完成...

weixin_38753422的博客 269

抽象化指令

诶别缩 print(abs(-1)) 哦 print(all((1,2,''))) 诶你 print(any([0,1,''])) 拼 print(bin(125)) 不吗 print(bool(None)) 白痴(.踢开) print(bytes('我草',encoding='utf-8').decode('utf-8')) 查 print(...

weixin_30412167的博客 186

Python中杨辉三角的理解(廖雪峰教程例)

在看到廖雪峰教程生成器一节习题杨辉三角时,一开始感觉很苦恼,没有思路,网上的各种解答也只是梳理程序执行过程,而没有抽象化解决问题的思路 注意:看此教程前请先学习生成器的原理,yield返回的用法规律,不然可能会懵逼。 下面我按照自己的理解写下思路: 首先附上我们需要求得的杨辉三角: [1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1]...

熊大的博客 3万+
上一篇: 开始Python -- 抽象化(1)
下一篇: 开始Python -- Magic方法(1)
ruby_beginner
博客等级 码龄21年 9粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值