2012年5月25日

摘要: 世界是普遍联系的,因此程序世界中的类,也不可能是孤立的。UML为我们定义了它们之间的关系,就是:依赖、关联、聚合、组合还有泛化。 泛化关系比较好理解,就是表示类之间的继承关系。容易混淆的是依赖、关联、聚合和组合的关系。这里做一些甄别: 1、依赖和关联的颠倒颠 在网上查找了一下依赖和关联的区别,有说“关联本身即是一种依赖”,亦有说“依赖是一种弱关联”,其实说来说去是一档子事。依赖和关联都是说一个类用到了另一个类。其区别在于一个是使用,一个是拥有。依赖:具有某种偶然性。比如说我要过河,没有桥怎么办,我就去借来一条小船渡过去。我与小船的关系仅仅是使用(借用)的关系。表现在代码上,为依赖的类的某个方法 阅读全文
posted @ 2012-05-25 10:58 很多不懂呀。。 阅读(365) 评论(0) 推荐(0) 编辑
摘要: UML的类图关系分为:关联、聚合/组合、依赖、泛化(继承)。而其中关联又分为双向关联、单向关联、自身关联;下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里。1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。对象引用本身就是有向的,更适合表达我们所讨论的那种关系。所以这种关系在设计的时候比较少用到,关联一般都是有向的。使用ROSE 生成的代码是这样的:classC1...{p 阅读全文
posted @ 2012-05-25 09:35 很多不懂呀。。 阅读(227) 评论(0) 推荐(0) 编辑

2012年5月24日

摘要: 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序源码例子例如,有模拟税收计算的程序:#!/usr/bin/pythondef debug_demo(val): if val <= 1600 : print "level 1" print 0 elif val <= 3500 : print "level 2" print (val - 1600) * 0.05 elif val <= 6500 : print "level 3" print (val - 3500) * 0.10 + (35 阅读全文
posted @ 2012-05-24 16:03 很多不懂呀。。 阅读(721) 评论(0) 推荐(0) 编辑
摘要: 当我们开发的项目比较大时,源文件也许是按照目录结构来存放的这样,就类似于java的package如果我们需要下级目录的py文件,可以有以下方法:1.sys.path.append('folder') 然后直接import folder.test2.在下级目录folder下放一个__init__.py文件,表明把目录作为一个module来对待然后直接import folder.test如果需要导入上层目录的py文件,则:sys.path.append(“..”)然后再import test 阅读全文
posted @ 2012-05-24 13:48 很多不懂呀。。 阅读(737) 评论(0) 推荐(1) 编辑
摘要: python中如果要使用全局变量,可以:1.在需要赋值的地方使用global:python中,如果在py中定义一个变量,然后在一个函数内对这个变量进行赋值操作,默认会生成一个局部变量而不是对原来的全局变量进行赋值的,如果想改变外边的变量的值,则要加上global2.调用对象的方法,如del,clear,append,pop:如果在外部定义一个如list,set,dic这样的对象时,如果对它们整体赋值,如:dic={},则仍然是生成一个局部变量dic但,如果调用这些对象的方法(clear,del,append,pop….)进行操作,如:dic.clear()或dic['a']=& 阅读全文
posted @ 2012-05-24 13:47 很多不懂呀。。 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 当我们运行一个单独的py文件,则python是不会编译该文件为pyc的,而是直接解释运行它但如果我们的一个py文件作为一个module被其它的py文件import,那么python默认会编译它为pyc文件pyc文件是python的字节码文件,其实还有一种pyo文件,是优化后的字节码文件如果想编译成pyc文件,可以使用py_comile或compileall模块折叠展开复制代码#编译单个文件import py_compile py_compile.compile('/opt/ysz/python/test.py') #编译整个目录import compileall compile 阅读全文
posted @ 2012-05-24 13:47 很多不懂呀。。 阅读(702) 评论(0) 推荐(0) 编辑
摘要: meliae是一个python进程内存占用监控、分析工具,它的安装需要依赖pyrex包meliae会把某个时刻的内存给dump到一个文件中,然后再对该文件进行分析当我们的某个python程序占用内存很大,可能有内存泄露发生时,可以使用该工具来进行检测分析安装和使用用都比较简单,在需要dump内存的地方,写上以下代码即可:折叠展开复制代码from meliae import scanner scanner.dump_all_objects('/opt/log/dump.txt') 这样,我们就可以把当前的内存Objects都导出到了dump.txt,然后再进行分析折叠展开复制代码 阅读全文
posted @ 2012-05-24 13:43 很多不懂呀。。 阅读(2122) 评论(0) 推荐(0) 编辑
摘要: twisted中的factory和对应的protocol结合大概有2种方式:1.在factory中定义:protocol = POP3ClientProtocol 这种方式默认是在twisted的prtocol.py中的buildProtocol方法中来生成对应的protocol实例,代码如下:def buildProtocol(self, addr): p = self.protocol() p.factory = self return p 这样,在protocol的init方法中是无法得到当前factory对象的,只能是在protocol的某个事件回调函数里去拿到factory 经常,我 阅读全文
posted @ 2012-05-24 13:37 很多不懂呀。。 阅读(975) 评论(0) 推荐(0) 编辑
摘要: 一般,在Twisted中使用Application的方式启动程序,是这样做:折叠展开复制代码pop_service = internet.TCPServer(…,…) popService = service.MultiService() pop_service.setServiceParent(popService) application= service.Application('popqueueservice') popService.setServiceParent(application) 通过setServiceParent来把某一个服务运行在applicatio 阅读全文
posted @ 2012-05-24 13:35 很多不懂呀。。 阅读(1157) 评论(0) 推荐(0) 编辑

2012年5月23日

摘要: 1 以线程安全模式运行代码 Twisted中大部分代码都不是线程安全例如protocol向transport写入数据就不是线程安全因此我们需要种思路方法来在主事件循环中进行调度者可以使用twisted.ernet.erfaces.IReactorThreads.callFromThread 来实现:from twisted.ernet import reactordef notThreadSafe(x): """做些非线程安全事情""" # ...def threadSafeScheduler: """以 阅读全文
posted @ 2012-05-23 17:37 很多不懂呀。。 阅读(2203) 评论(1) 推荐(0) 编辑

导航