
OOP
文章平均质量分 71
grey_csdn
这个作者很懒,什么都没留下…
展开
-
Python对象属性的自动更新
在软件设计中会遇到这样的问题:有些属性之间有相互关联。这样,其中的一个属性变化的时候其他的属性也应该跟随变化。 先看一段示例代码:#!/usr/bin/python class DemoClss: def__init__(self,val1,val2): self.val1= val1原创 2017-09-02 11:41:32 · 4874 阅读 · 1 评论 -
Python浅复制中对象的生存周期
Python的浅复制以及深复制我了解的并不多,我不清楚shutil中的copy1和copy2是不是算是浅复制和深复制?这两个操作,一个是文件属性重建,还有一个是文件属性不变。不知道对象的复制是否可以以此类比? 在复制之前,为了能够观看一下GC的执行,定义一个特殊的类和对象。测试代码如下:class Demo: def __del__(self):原创 2017-08-27 22:35:06 · 502 阅读 · 0 评论 -
Python对象中__del__方法起作用的条件
对象的__del__是对象在被gc消除回收的时候起作用的一个方法,它的执行一般也就意味着对象不能够继续引用。 示范代码如下:class Demo: def __del__(self): print("calling __del__") obj = Demo()del obj 程序执行结果如下:grey原创 2017-08-27 21:07:11 · 4225 阅读 · 0 评论 -
Python中使用property实现类的特性
Python中的特性是一个函数,但是在使用的形式上看起来更像是一个属性。针对一个对象来说,与属性相比,特性是不能够随意添加的。而对象的属性,默认情况下添加是十分简单的。 下面通过代码展示如何使用property实现特性:class MyClass: def __init__(self,val1,val2): self.val1 =原创 2017-08-21 00:52:56 · 484 阅读 · 0 评论 -
Python通过属性手段实现只允许调用一次的方法
如果希望一个对象的某个方法只能够调用一次,按照我之前的惯性思维,我肯定是定义一个状态量然后每次调用的时候修改它的值。通过查看状态量的数值,我可以决定采取执行不同的处理。其实,除此之外还有一种方法,不仅仅能够实现这样的处理,还能够顺便处理对象的属性。 先看一下如下的代码:class DemoClass: def __init__(self):原创 2017-08-20 22:27:52 · 10304 阅读 · 0 评论 -
Python中的@classmethod用法
在Python面向对象编程中的类构建中,有时候会遇到@classmethod的用法。总感觉有这种特殊性说明的用法都是高级用法,在我这个层级的水平中一般是用不到的。不过还是好奇去查了一下。 大致可以理解为:使用了@classmethod修饰的方法是类专属的,而且是可以通过类名进行调用的。为了能够展示其与一般方法的差异,写一段简单的代码如下:class DemoClass:原创 2017-08-19 11:53:58 · 21592 阅读 · 3 评论 -
Python面向对象编程中属性的基本操作
在面向对象编程中,属性与方法的使用十分频繁。接下来对属性的基础操作进行简单的学习小结。 在Python OOP中,属性的操作一般有如下几种: 1,添加属性 2,修改属性的值 3,获取属性的值 4,删除属性 通过一段简单的示范代码来说明一下:class DemoClass: pass o原创 2017-08-19 11:15:40 · 608 阅读 · 0 评论 -
Python中最基础类的属性和信息
查看Python中基础类的属性和信息可以看一下Python面向对象编程所接触到的最基本的东西。今天我想探索的是两个不同的大版本之间差异,也就是Python2和Python3之间的差异。 通常,我查看一个类或者对象的属性的时候我会使用dir。使用dir函数可以查看到类或者对象的大多数属性或者方法,但是也不一定全面,有一部分特殊的属性或者方法显示不出来。如果想要显示的完整一些,可以直接原创 2017-08-18 22:30:09 · 680 阅读 · 0 评论 -
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 · 2669 阅读 · 0 评论 -
使用__del__方法在Python文件处理时保证文件关闭
__del__方法的一个很好的用途就是用于文件处理中关闭文件,通过与文件关闭功能的关联让关闭成为一种默认的处理方式。 在文件处理的程序中通常会含有__del__= close来保证__del__()方法与close()方法的一致。 这种设计考虑的思想很容易理解,但是到底在什么场景中使用确实是一个比较难考虑的问题。毕竟,这个方法的实现应该是在类中,而相应的功能映射应该原创 2017-08-18 02:07:43 · 898 阅读 · 0 评论 -
Python中的weakref简单小结
当对一个对象的引用只有弱引用的时候,垃圾回收机制可以把孩子个对象在不用了的时候销毁,把内存用于其他地方。 弱引用其中一个用途是用于实现大对象的缓存或者映射,由于是缓存火映射,对象不需要独立存在。Python weakref中提供WeakKeyDictionary和WeakValueDictionary两个类用于构建非长久驻留内存的对象。当最后一次引用之后,垃圾回收机制会回收其内存。原创 2017-08-18 01:39:19 · 6940 阅读 · 0 评论 -
Python2与Python3在不同类的对象比较上的差异
之前写了那么多的脚本,没有发现Python2与Python3太大的差异。接触面向对象编程,学习的过程中发现各种不同的差异。 接下来看一下Python2与Python3在不同类的对象对比上的差异。 先看一段示范代码:class myClass: def __init__(self,value): self.value原创 2017-08-16 23:10:03 · 2460 阅读 · 0 评论 -
Python中定制类的比较运算方法
Python中的比较运算有几种:小于、小于等于、等于、大于等于、大于、不等于等。如果我们的数据对象具有明确的物理含义,比如说数值是带有数字与物理单位的字符串组合,那么进行大小比较的时候就可以做此定制。 下面针对6种比较方法中的一种来进行定制示范,选择小于判断来做尝试。写如下示范代码:class myClass: def __init__(self,value):原创 2017-08-16 22:39:58 · 3666 阅读 · 0 评论 -
Python2与Python3中__bool__方法的差异
学习Python面向对象编程的时候,遇到了一个很有意思的小问题。Python的__bool__方法不起作用的问题。 我反复读了我手中的教程,确认了我写的代码应该管用。可是在测试的时候却一直不通过,后来发现我实现的__bool__方法似乎并不是Python本身的接口。 代码如下:class Demo(): def __init__(self,val原创 2017-08-16 22:24:03 · 2685 阅读 · 0 评论 -
Python中的哈希常识小结
Python中,哈希是一种将相对复杂的值简化成小整数的计算方式。哈希值可以表示出原值所有的位,有些哈希值会得出非常大的数值,这样的算法通常用于密码学。 Python中也有基础的模块库可以支持部分哈希的算法。 不同的平台、不同的系统哈希值的计算可能会不同,这里简单对我自己的电脑做一个试探。写如下测试代码:x = object()print(hash(x))原创 2017-08-16 20:52:27 · 10537 阅读 · 0 评论 -
Python中的静态函数的用法
Python中也存在静态函数,查看文档之后,文档解释这个功能跟Java或者C++的功能相同的。 总结Python中的静态函数,先看一段自己写的简单的代码:class MyClass: @staticmethod def Func(): print("static function inpython") cla原创 2017-08-12 19:16:08 · 2768 阅读 · 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 · 9660 阅读 · 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 · 34158 阅读 · 0 评论 -
Python abc模块的几个小知识点
编程的思想应该在不断地实践中才能够体悟,这是我自己的感受。接触了好长一段时间的OOP,但是一直在实战中用到的很少。或许,平时我需要的仅仅是一些小脚本而已。今天总结一下学习Python OOP遇到的一个小模块,abc。 首先需要了解的是一个基类,abc.ABCMeta。最初看到与之相关的代码,我还把这个理解为了一个参数。这让我在读代码的时候有点不理解。查了一下文档,恍然大悟。原来,这原创 2017-08-12 10:31:28 · 14709 阅读 · 2 评论 -
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 · 22430 阅读 · 0 评论 -
Python编程中NotImplementedError的使用
Python编程中raise可以实现报出错误的功能,而报错的条件可以由程序员自己去定制。在面向对象编程中,可以先预留一个方法接口不实现,在其子类中实现。如果要求其子类一定要实现,不实现的时候会导致问题,那么采用raise的方式就很好。而此时产生的问题分类是NotImplementedError。 写一段代码如下:class ClassDemo: def test原创 2017-08-10 22:52:07 · 94723 阅读 · 4 评论 -
Python实现接受任意个数参数的函数
这个功能倒也不是我多么急需的功能,只是恰好看到了,觉得或许以后会用的到。功能就是实现函数能够接受不同数目的参数。 其实,在C语言中这个功能是熟悉的,虽说实现的形式不太一样。C语言中的main函数是可以实现类似的功能的,可以通过这种方式实现一个支持命令行参数的程序。 先写一段python实现相应功能的示范代码:defFuncDemo(*par):原创 2017-08-10 20:02:18 · 11716 阅读 · 0 评论 -
Python OOP容器设计时合理引入列表方法
面向对象编程的一个最大的优点就在于继承,通过继承可以重用很多已经设计好的功能。接下来,通过简单的一个代码模拟说明一下继承的优点。 首先,写一段代码如下:import random class Demo1(): def __init__(self): self.nums = [i for i in range(10)]原创 2017-08-09 23:25:09 · 344 阅读 · 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 · 12661 阅读 · 0 评论 -
Python2与Python3中的list异同
这次仅仅从自己实践经验上来做一次简单的小结,Python 2与Python 3中的list在使用中的异同点做一个简单的总结。 跟随技术的脚步,我自己的机器上安装的是Python3,前阵子找到的最新版本。但是,现在很多地方大量用到的版本其实是2.X。我自己的Python学习最基础只是的掌握其实是从Python2开始的,最初的几个简单的功能掌握中就是list。在idle中输入list直原创 2017-07-27 23:09:22 · 1268 阅读 · 0 评论 -
Python OOP中的封装与容器小结
从我手头的书籍资料中并没有封装与容器这两个概念的定义,我自己给总结定义如下: 封装:设计一个类使其能够含有所有的类的对象的过程。 容易:封装后的类实例化后就生成一个容器。 之前的代码中设计了扑克牌的相应描述类,具体代码如下:#!/usr/bin/python class Card: def __原创 2017-07-19 23:06:44 · 545 阅读 · 0 评论 -
Python OOP中如何在继承中避免代码重复设计
代码的重复设计可能会导致重复的问题出现以及重复的维护工作,这不仅仅是工作时间的增加,有时候也会带来很多维护上的困难。从继承角度来看,很多代码的重复是因为代父类的设计不够好。下面通过对比两段代码来看一下相应的问题:代码1:class Card: pass classNumberCard(Card): def __init__(self,rank,sui原创 2017-07-19 22:42:11 · 885 阅读 · 0 评论 -
Python2与Python3中关于最上层类继承上的一点小差异
今天调代码的时候遇到了一点问题,定位到最后最终发现是Python版本的问题。解析器的升级实在是不方便,最终只好出现了两种不同的代码。 问题出现在类的继承上,这方面我基础薄弱,很多时候都是参考别人的代码。结果最终发现别人用的好好的东西在我这里居然不灵了!如下面的代码:#!/usr/bin/python class Demo: pass原创 2017-07-17 22:32:43 · 1220 阅读 · 0 评论 -
Python中defaultdict与lambda表达式小结
从教程中看到defaultdict是一个类,在一台装有Python2.7.6的电脑上使用发现不存在。在文档中搜索了一下也没有找到,想当然以为这或许是Python 3.X专有的。因为教程就是基于Python 3.X实现的。后来换了一台装有Python 3.X的电脑依然出问题。 求助于网络,发现这个类其实是collections模块中的一个类。看来,学习很难摆脱网络环境啊!原创 2017-07-11 00:07:57 · 13103 阅读 · 3 评论 -
Python中lambda的使用
这部分还是从简单的例子开始入手吧!>>> f =lambda x,y:x+y>>>f(3,5)8>>> f at 0x000001D7E26D6400> 从上面的结果可以看出,lambda实现的功能对象f其实是一个函数,这种该函数成为匿名函数。在冒号前面的部分是函数的参数,冒号后面的内容可以理解为函数体。这样,lambda表达式实现的功能一般可以用来代替比较简单原创 2017-07-10 23:49:48 · 1866 阅读 · 0 评论 -
Python中的字典与C语言中的switch结构类比
题目中用了类比而不是对比,因为我觉得我想要的并不是他们两者之间的差异,而是想在Python中找到一种方式能够完全代替C语言中的switch结构。 之前使用字典功能模拟switch结构的时候总觉得有点缺憾,因为自己还要构造switch的default分支的模拟逻辑。 其实,之前真是走了弯路了。在Python中,这种方式完全没有必要。字典中的get方法中可以使用默认的参原创 2017-07-10 23:39:31 · 1675 阅读 · 0 评论 -
使用VS创建第一个窗口程序
我觉得C#或者说整个VS的开发环境或者功能对我最有吸引力的不是什么控制台程序,这种程序或者功能的实现使用Python等脚本语言实现起来似乎是更为便捷。对我真正有吸引力的是Windows的窗口程序。 接下来使用VS社区版本创建一个窗体程序:1,在创建项目的时候选择Windows窗体应用程序2,从左侧的工具栏中加入一个按钮3,双击按钮,进入到按键激活原创 2017-07-10 08:00:50 · 25796 阅读 · 1 评论 -
使用社区版VS创建第一个控制台程序
先前看Linux的故事看多了,看得我有些不是很喜欢微软的技术。说起来,微软的很多产品确实是多了那么几分令人不安的因素。不过,如果实在Windows平台上混日子,又想做点什么应用程序开发,相信没有什么比C#更方便了。 前年的时候了解了一丁点儿的C#,但是一直也没有学完整个语言体系的基础知识。我觉得障碍还是在于编程思想的阻碍,目前我还是处于C语言的世界更多一些。接下来通过Python掌原创 2017-07-10 07:39:49 · 853 阅读 · 0 评论 -
使用elif分支代替映射简化设计
在Python的程序设计中,字典这样的映射程序总是可以用elif结构来代替。通常,这样可以使得设计获得更好的一致性。例如,之前有代码如下:#!/usr/bin/python class Card: def __init__(self,rank,suit): self.suit = suit self.rank原创 2017-07-07 00:46:47 · 525 阅读 · 0 评论 -
Python中的工厂函数
参考了很多代码、别人的文章以及书籍,最后自己做了适合自己理解的一种理解总结方式。 很多人说,工厂函数看上去像函数,其实是类。我觉得这种方法有些牵强,虽说在OOP中Python有其自己对类以及对象的定义。在一定程度上这么说是可以的。 我个人的理解,既然叫做工厂函数,那么这一定是一个函数。不过,看了许多例子后发现,其实工厂函数基本上都是带有返回对象的。而这些返回对象则是原创 2017-07-04 01:19:06 · 9183 阅读 · 0 评论 -
Python类或者对象的属性设计
我个人是个相对纯粹一些的C程序员,而且是一个嵌入式控制器软件设计的C程序员。平时接触到的面向对象的东西比较少,即使是类似的思想也很少。偶尔能够用到一点复杂的结构体,基本用到的属性的概念基本上也都是基础的数据类型。这让我自己在接触Python面向对象编程的知识时有了一些思维上的定式。 其实,在Python面向对象的程序设计中,类或者对象的属性可以非常灵活。常用的方式不仅仅是简单的基础原创 2017-07-04 00:54:17 · 609 阅读 · 0 评论 -
Python面向对象编程中公共初始化方法的实现
其实,公共初始化的实现肯定是可以通过多次编写同样的初始化方法实现。但是,多次编写的这种方式不仅繁杂而且不容易管理。如果要做到管理方便、软件的结构清晰,最好还是创建一个基类然后让其他的类全都继承此基类。 例如,有代码如下:#!/usr/bin/python class Card: def __init__(self,rank,suit):原创 2017-07-04 00:33:08 · 894 阅读 · 0 评论 -
Python中partial的使用
Parrtial的功能是可以提前向函数传递一部分参数,传递的原则是按照顺序传入。举个简单的例子,假如有以下代码:from functoolsimport partial def Demo1(a,b): return a + b Demo1_p =partial(Demo1,5)r_Demo1 =Demo1_p(7)print(r_Demo1)原创 2017-06-28 08:13:45 · 1448 阅读 · 0 评论 -
Python中字典get方法的使用
说起来,这个功能是否需要学习还真是有待于讨论。其实,知道了字典这种数据结构以后,通过最基本的Python功能也能够实现一个类似的功能。不过,既然内置了这个功能那么我们就没有必要重复造车轮。 在字典内置的方法中,想说的方法为get。这个方法是通过键来获取相应的值,但是如果相应的键不存在则返回None。其实,None只是一个默认的返回值但是并不是一个不能修改的返回值。其实,如果查询失败原创 2017-06-05 23:49:14 · 11318 阅读 · 0 评论 -
Python中switch结构的实现
Python中switch条件分支结构的实现一般是通过字典来实现,或许这个基本上是最初接触过Python的人也能够掌握的技巧。不过在更深入模拟C语言中的switch语句功能上,还是有一点其他的小技巧需要注意一下。 简单实现一个switch的分支结构,示范代码如下:#!/usr/bin/python def Func1(): print("function原创 2017-06-05 23:38:31 · 3524 阅读 · 0 评论