
OOP
文章平均质量分 71
grey_csdn
这个作者很懒,什么都没留下…
展开
-
Python对象属性的自动更新
在软件设计中会遇到这样的问题:有些属性之间有相互关联。这样,其中的一个属性变化的时候其他的属性也应该跟随变化。 先看一段示例代码:#!/usr/bin/python class DemoClss: def__init__(self,val1,val2): self.val1= val1原创 2017-09-02 11:41:32 · 4409 阅读 · 1 评论 -
Python编程中NotImplementedError的使用
Python编程中raise可以实现报出错误的功能,而报错的条件可以由程序员自己去定制。在面向对象编程中,可以先预留一个方法接口不实现,在其子类中实现。如果要求其子类一定要实现,不实现的时候会导致问题,那么采用raise的方式就很好。而此时产生的问题分类是NotImplementedError。 写一段代码如下:class ClassDemo: def test原创 2017-08-10 22:52:07 · 90713 阅读 · 4 评论 -
Python中__new__方法的使用
先看一段代码:classdoubleFloat(float): def __new__(cls,arg = .6): return float.__new__(cls,arg * 2) a = doubleFloat()print(a) b =doubleFloat(1.9)print(b) 程序执行结果:原创 2017-08-18 02:23:10 · 2608 阅读 · 0 评论 -
使用__del__方法在Python文件处理时保证文件关闭
__del__方法的一个很好的用途就是用于文件处理中关闭文件,通过与文件关闭功能的关联让关闭成为一种默认的处理方式。 在文件处理的程序中通常会含有__del__= close来保证__del__()方法与close()方法的一致。 这种设计考虑的思想很容易理解,但是到底在什么场景中使用确实是一个比较难考虑的问题。毕竟,这个方法的实现应该是在类中,而相应的功能映射应该原创 2017-08-18 02:07:43 · 793 阅读 · 0 评论 -
Python中的weakref简单小结
当对一个对象的引用只有弱引用的时候,垃圾回收机制可以把孩子个对象在不用了的时候销毁,把内存用于其他地方。 弱引用其中一个用途是用于实现大对象的缓存或者映射,由于是缓存火映射,对象不需要独立存在。Python weakref中提供WeakKeyDictionary和WeakValueDictionary两个类用于构建非长久驻留内存的对象。当最后一次引用之后,垃圾回收机制会回收其内存。原创 2017-08-18 01:39:19 · 6828 阅读 · 0 评论 -
Python实现接受任意个数参数的函数
这个功能倒也不是我多么急需的功能,只是恰好看到了,觉得或许以后会用的到。功能就是实现函数能够接受不同数目的参数。 其实,在C语言中这个功能是熟悉的,虽说实现的形式不太一样。C语言中的main函数是可以实现类似的功能的,可以通过这种方式实现一个支持命令行参数的程序。 先写一段python实现相应功能的示范代码:defFuncDemo(*par):原创 2017-08-10 20:02:18 · 11477 阅读 · 0 评论 -
Python OOP容器设计时合理引入列表方法
面向对象编程的一个最大的优点就在于继承,通过继承可以重用很多已经设计好的功能。接下来,通过简单的一个代码模拟说明一下继承的优点。 首先,写一段代码如下:import random class Demo1(): def __init__(self): self.nums = [i for i in range(10)]原创 2017-08-09 23:25:09 · 309 阅读 · 0 评论 -
Python中list的extend方法
List的extend方法是一个扩充列表元素内容的方法,在一定程度上其行为有点像append。只是在接受的参数以及最终的效果上有些差异。 写如下示范代码:#!/usr/bin/python list1 = [1,2,4]list2 = [12,6] list1.extend(list2)print(list1) 程序执行结果:E:\0原创 2017-08-09 22:47:01 · 12377 阅读 · 0 评论 -
Python2与Python3在不同类的对象比较上的差异
之前写了那么多的脚本,没有发现Python2与Python3太大的差异。接触面向对象编程,学习的过程中发现各种不同的差异。 接下来看一下Python2与Python3在不同类的对象对比上的差异。 先看一段示范代码:class myClass: def __init__(self,value): self.value原创 2017-08-16 23:10:03 · 2375 阅读 · 0 评论 -
Python中定制类的比较运算方法
Python中的比较运算有几种:小于、小于等于、等于、大于等于、大于、不等于等。如果我们的数据对象具有明确的物理含义,比如说数值是带有数字与物理单位的字符串组合,那么进行大小比较的时候就可以做此定制。 下面针对6种比较方法中的一种来进行定制示范,选择小于判断来做尝试。写如下示范代码:class myClass: def __init__(self,value):原创 2017-08-16 22:39:58 · 3474 阅读 · 0 评论 -
Python2与Python3中__bool__方法的差异
学习Python面向对象编程的时候,遇到了一个很有意思的小问题。Python的__bool__方法不起作用的问题。 我反复读了我手中的教程,确认了我写的代码应该管用。可是在测试的时候却一直不通过,后来发现我实现的__bool__方法似乎并不是Python本身的接口。 代码如下:class Demo(): def __init__(self,val原创 2017-08-16 22:24:03 · 2615 阅读 · 0 评论 -
Python中@符号的用法-1
首先参考了几篇网络上的文章或者教程,看完之后也没有弄明白这个功能是什么意思。于是查了一下Python的文档,相关的描述如下:A function definition may be wrapped by one or more decorator expressions. Decorator expressions areevaluated when the function is def原创 2017-08-11 00:15:07 · 22153 阅读 · 0 评论 -
Python中最基础类的属性和信息
查看Python中基础类的属性和信息可以看一下Python面向对象编程所接触到的最基本的东西。今天我想探索的是两个不同的大版本之间差异,也就是Python2和Python3之间的差异。 通常,我查看一个类或者对象的属性的时候我会使用dir。使用dir函数可以查看到类或者对象的大多数属性或者方法,但是也不一定全面,有一部分特殊的属性或者方法显示不出来。如果想要显示的完整一些,可以直接原创 2017-08-18 22:30:09 · 611 阅读 · 0 评论 -
Python abc模块的几个小知识点
编程的思想应该在不断地实践中才能够体悟,这是我自己的感受。接触了好长一段时间的OOP,但是一直在实战中用到的很少。或许,平时我需要的仅仅是一些小脚本而已。今天总结一下学习Python OOP遇到的一个小模块,abc。 首先需要了解的是一个基类,abc.ABCMeta。最初看到与之相关的代码,我还把这个理解为了一个参数。这让我在读代码的时候有点不理解。查了一下文档,恍然大悟。原来,这原创 2017-08-12 10:31:28 · 14444 阅读 · 2 评论 -
Python浅复制中对象的生存周期
Python的浅复制以及深复制我了解的并不多,我不清楚shutil中的copy1和copy2是不是算是浅复制和深复制?这两个操作,一个是文件属性重建,还有一个是文件属性不变。不知道对象的复制是否可以以此类比? 在复制之前,为了能够观看一下GC的执行,定义一个特殊的类和对象。测试代码如下:class Demo: def __del__(self):原创 2017-08-27 22:35:06 · 454 阅读 · 0 评论 -
Python对象中__del__方法起作用的条件
对象的__del__是对象在被gc消除回收的时候起作用的一个方法,它的执行一般也就意味着对象不能够继续引用。 示范代码如下:class Demo: def __del__(self): print("calling __del__") obj = Demo()del obj 程序执行结果如下:grey原创 2017-08-27 21:07:11 · 4060 阅读 · 0 评论 -
Python中使用property实现类的特性
Python中的特性是一个函数,但是在使用的形式上看起来更像是一个属性。针对一个对象来说,与属性相比,特性是不能够随意添加的。而对象的属性,默认情况下添加是十分简单的。 下面通过代码展示如何使用property实现特性:class MyClass: def __init__(self,val1,val2): self.val1 =原创 2017-08-21 00:52:56 · 442 阅读 · 0 评论 -
Python通过属性手段实现只允许调用一次的方法
如果希望一个对象的某个方法只能够调用一次,按照我之前的惯性思维,我肯定是定义一个状态量然后每次调用的时候修改它的值。通过查看状态量的数值,我可以决定采取执行不同的处理。其实,除此之外还有一种方法,不仅仅能够实现这样的处理,还能够顺便处理对象的属性。 先看一下如下的代码:class DemoClass: def __init__(self):原创 2017-08-20 22:27:52 · 10018 阅读 · 0 评论 -
Python中的静态函数的用法
Python中也存在静态函数,查看文档之后,文档解释这个功能跟Java或者C++的功能相同的。 总结Python中的静态函数,先看一段自己写的简单的代码:class MyClass: @staticmethod def Func(): print("static function inpython") cla原创 2017-08-12 19:16:08 · 2597 阅读 · 0 评论 -
Python2与Python3中的list异同
这次仅仅从自己实践经验上来做一次简单的小结,Python 2与Python 3中的list在使用中的异同点做一个简单的总结。 跟随技术的脚步,我自己的机器上安装的是Python3,前阵子找到的最新版本。但是,现在很多地方大量用到的版本其实是2.X。我自己的Python学习最基础只是的掌握其实是从Python2开始的,最初的几个简单的功能掌握中就是list。在idle中输入list直原创 2017-07-27 23:09:22 · 1190 阅读 · 0 评论 -
Python中的join函数用法
Python中的join跟Perl中的join在功能上有一点相似。Python中,join用于实现序列或者集合的合并,而且可以指定合并时候元素之间的间隔符号。此外,还能够将字符串作为一个对象对每个可切片元素进行合并。 先看一下对字符串的合并。grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_pyt原创 2017-08-12 15:32:48 · 9411 阅读 · 0 评论 -
Python中isinstance用法
Isinstance的用法是用来判断一个量是否是相应的类型,接受的参数一个是对象加一种类型。示范代码如下:a = 1print(isinstance(a,int))print(isinstance(a,float)) 程序的执行结果如下:grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03原创 2017-08-12 14:31:00 · 33733 阅读 · 0 评论 -
Python中的@classmethod用法
在Python面向对象编程中的类构建中,有时候会遇到@classmethod的用法。总感觉有这种特殊性说明的用法都是高级用法,在我这个层级的水平中一般是用不到的。不过还是好奇去查了一下。 大致可以理解为:使用了@classmethod修饰的方法是类专属的,而且是可以通过类名进行调用的。为了能够展示其与一般方法的差异,写一段简单的代码如下:class DemoClass:原创 2017-08-19 11:53:58 · 21279 阅读 · 3 评论 -
Python面向对象编程中属性的基本操作
在面向对象编程中,属性与方法的使用十分频繁。接下来对属性的基础操作进行简单的学习小结。 在Python OOP中,属性的操作一般有如下几种: 1,添加属性 2,修改属性的值 3,获取属性的值 4,删除属性 通过一段简单的示范代码来说明一下:class DemoClass: pass o原创 2017-08-19 11:15:40 · 548 阅读 · 0 评论 -
Python中的哈希常识小结
Python中,哈希是一种将相对复杂的值简化成小整数的计算方式。哈希值可以表示出原值所有的位,有些哈希值会得出非常大的数值,这样的算法通常用于密码学。 Python中也有基础的模块库可以支持部分哈希的算法。 不同的平台、不同的系统哈希值的计算可能会不同,这里简单对我自己的电脑做一个试探。写如下测试代码:x = object()print(hash(x))原创 2017-08-16 20:52:27 · 10446 阅读 · 0 评论 -
Python OOP中的封装与容器小结
从我手头的书籍资料中并没有封装与容器这两个概念的定义,我自己给总结定义如下: 封装:设计一个类使其能够含有所有的类的对象的过程。 容易:封装后的类实例化后就生成一个容器。 之前的代码中设计了扑克牌的相应描述类,具体代码如下:#!/usr/bin/python class Card: def __原创 2017-07-19 23:06:44 · 481 阅读 · 0 评论 -
Python中字典get方法的使用
说起来,这个功能是否需要学习还真是有待于讨论。其实,知道了字典这种数据结构以后,通过最基本的Python功能也能够实现一个类似的功能。不过,既然内置了这个功能那么我们就没有必要重复造车轮。 在字典内置的方法中,想说的方法为get。这个方法是通过键来获取相应的值,但是如果相应的键不存在则返回None。其实,None只是一个默认的返回值但是并不是一个不能修改的返回值。其实,如果查询失败原创 2017-06-05 23:49:14 · 11211 阅读 · 0 评论 -
Python中switch结构的实现
Python中switch条件分支结构的实现一般是通过字典来实现,或许这个基本上是最初接触过Python的人也能够掌握的技巧。不过在更深入模拟C语言中的switch语句功能上,还是有一点其他的小技巧需要注意一下。 简单实现一个switch的分支结构,示范代码如下:#!/usr/bin/python def Func1(): print("function原创 2017-06-05 23:38:31 · 3440 阅读 · 0 评论 -
Python中for复合语句的使用
当Python中用到双重for循环设计的时候我一般会使用循环的嵌套,但是在Python中其实还存在另一种技巧——for复合语句。 简单写一个小程序,用于延时循环嵌套功能如下:#!/usr/bin/python defFunc1(ten_num,one_num): for i in range(ten_num): for j原创 2017-06-05 23:16:25 · 4048 阅读 · 0 评论 -
MATLAB面向对象编程get与set方法实现
在MATLAB面向对象编程中,set与get分别是重新定义参数设置以及查询功能的方法,类似于Java中类似的功能。在实现方式上,有一点区别差异。另外,在实现方式上,暂时没有发现MATLAB可以直接像eclipse中编辑Java代码那样生成默认的方法。 写一个简单的例子演示set与get功能,创建以下类:classdef GetSetDemo properties原创 2017-05-19 01:18:12 · 4028 阅读 · 1 评论 -
MATLAB面向对象编程属性初始化方法
在MATLAB面向对象编程的类构建中,属性的初始化一般有两种方法:一种是使用构造函数,另一种则是在定义属性的时候初始化。 使用构造函数的例子:classdef DemoClass properties age; hight; end methods function obj = DemoClass原创 2017-05-19 00:38:46 · 5780 阅读 · 0 评论 -
MATLAB面向对象编程import导入信息冲突解决方案
在使用MATLAB面向对象编程的包管理import导入时,如果出现导入的两个包中存在相同的类时就会出现我们期待之外的软件行为。因为,MATLAB的导入遵循的是“先入为主”的生效方式,也就是说后面的导入时无效的。然而,我们在新的一次导入结束后通常希望使用的都是新导入的类。这样,如果不使用合适的处理方式我们的设计目的就无法达成。 在MATLAB包管理import导入的时候,为了避免类似导原创 2017-05-18 23:37:43 · 1145 阅读 · 0 评论 -
MATLAB面向对象编程import导入信息冲突问题
MATLAB中使用import导入信息的时候有时候会遇到一点混乱现象。比如,当我们尝试导入的两个包中存在同名但是内容并不相同的类时,两者肯定是会产生冲突的。那么,导入的类到底以哪个稳准呢? 在之前搭建的包测试环境上做一下测试如下: 从上面的结果看,最终MyClassA是按照Pack1中的类来执行的。而Pack导入要在Pack2之前。由此可见,这种导入过程中并原创 2017-05-18 23:29:47 · 706 阅读 · 0 评论 -
MATLAB面向对象编程import使用
类似于Python以及Java,针对模块库或者包中的内容可以通过import指令进行模块或者功能的导入。这样,可以在一定程度上简化代码,提高可读性。 例如之前在博客中实现的包管理例程,进行一个常用类的导入,可以通过以下方式: 这样,如果直接使用MyClassA即可实现调用Pack1中的类。此时如果要使用Pack2中的类,依然需要指明包。 如果有原创 2017-05-18 23:19:43 · 2558 阅读 · 0 评论 -
Python OOP面向对象编程在基类中使用__init__
__init__()方法在每次对象创建的时候就会调用,这个方法因此比较适合对一些对象的内部变量或者其他一些一次性过程进行初始化。 构造如下类:#!/usr/bin/python class MyBase: def__init__(self,par1,par2): self.par1= par1 self.p原创 2017-05-24 20:33:14 · 642 阅读 · 0 评论 -
Python3 OOP面向对象编程最基本的类
小米路由器出了问题告别了一天网络,也不知道是出了什么问题。真有些怀疑被黑了,用了一年的密码居然怎么也不好用了。把路由器恢复了出厂设置又把密码彻底更新了一遍。由于网络折腾,都两天没有好好学习了。 最近开始深入学习Python OOP,当然,目前还是一个起步的阶段。我觉得面向对象编程的技术我肯定要学,最好的选择或许是Python、Java、C#中的一个。前面了解了一下MATLAB面向对象原创 2017-05-24 19:55:25 · 753 阅读 · 0 评论 -
MATLAB面向对象编程中类的默认优先级
通过简单的测试,我自己总结出来的默认规则是:在MATLAB面向对象编程的类使用中,如果出现同名的方法,那么在调用的过程中MATLAB会采用先入为主的方式来判断其优先级。 通过一个例子简单示范说明,首先定义两个类classA和classB,具体的代码如下:classA:classdef classA properties a; end原创 2017-05-21 23:54:43 · 921 阅读 · 0 评论 -
Python中的字典与C语言中的switch结构类比
题目中用了类比而不是对比,因为我觉得我想要的并不是他们两者之间的差异,而是想在Python中找到一种方式能够完全代替C语言中的switch结构。 之前使用字典功能模拟switch结构的时候总觉得有点缺憾,因为自己还要构造switch的default分支的模拟逻辑。 其实,之前真是走了弯路了。在Python中,这种方式完全没有必要。字典中的get方法中可以使用默认的参原创 2017-07-10 23:39:31 · 1550 阅读 · 0 评论 -
Python中lambda的使用
这部分还是从简单的例子开始入手吧!>>> f =lambda x,y:x+y>>>f(3,5)8>>> f at 0x000001D7E26D6400> 从上面的结果可以看出,lambda实现的功能对象f其实是一个函数,这种该函数成为匿名函数。在冒号前面的部分是函数的参数,冒号后面的内容可以理解为函数体。这样,lambda表达式实现的功能一般可以用来代替比较简单原创 2017-07-10 23:49:48 · 1782 阅读 · 0 评论 -
Python OOP中如何在继承中避免代码重复设计
代码的重复设计可能会导致重复的问题出现以及重复的维护工作,这不仅仅是工作时间的增加,有时候也会带来很多维护上的困难。从继承角度来看,很多代码的重复是因为代父类的设计不够好。下面通过对比两段代码来看一下相应的问题:代码1:class Card: pass classNumberCard(Card): def __init__(self,rank,sui原创 2017-07-19 22:42:11 · 796 阅读 · 0 评论