【Python学习之八】设计模式和异常

环境
  虚拟机:VMware 10
  Linux版本:CentOS-6.5-x86_64
  客户端:Xshell4
  FTP:Xftp4
  python3.6

一、设计模式
1、单例模式
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。

class Singleton(object):
    __instance=None
    __first_init=False

    def __new__(cls,name,age):
        if not cls.__instance:
            cls.__instance=object.__new__(cls);
        return cls.__instance
    def __init__(self,name,age):
        if not self.__first_init:
            self.name=name
            self.age=age
            Singleton.__first_init=True

a=Singleton(‘bin‘,18)
b=Singleton(‘bin‘,8)
#只有一个实例
print(id(a))
print(id(b))
#只初始化一次
print(a.age)
print(b.age)
#修改属性
a.age=19
print(b.age)

2、工厂模式
2.1、Simple Factory模式不是独立的设计模式,他是Factory Method模式的一种简单的、特殊的实现。他也被称为静态工厂模式,通常创建者的创建方法被设计为static方便调用。
(1)静态的工厂类
(2)用全局函数改写工厂类

class Person(object):
    def __init__(self,name):
        self.name=name
    def work(self,type):
        print(‘%s开始工作了‘%self.name)
        ax=Factory.create_axe(self, type)
        ax.cut_tree()

class Axe(object):
    def cut_tree(self):
        print(‘开始砍树了‘)
class StoneAxe(Axe):
    def cut_tree(self):
        print(‘石斧砍树‘)
class SteelAxe(Axe):
    def cut_tree(self):
        print("使用钢斧头砍树")
class WaterAxe(Axe):
    def cut_tree(self):
        print("使用水砍树")    

class Factory(object):
    @staticmethod
    def create_axe(self,ax_type):
        if ax_type==‘stone‘:
            return StoneAxe()
        elif ax_type==‘steel‘:
            return SteelAxe()
        elif ax_type==‘water‘:
            return WaterAxe()
        else:
            print(‘类型错误‘)
p=Person(‘光头强‘)#光头强开始工作了
p.work(‘steel‘)#使用钢斧头砍树

2.2、工厂方法模式
工厂方法模式去掉了简单工厂模式中工厂方法的静态方法,使得它可以被子类继承。对于python来说,就是工厂类被具体工厂继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。
抽象的工厂类提供了一个创建对象的方法,也叫作工厂方法。
(1) 抽象工厂角色(Factory): 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。
(2) 具体工厂角色(Stone_Axe_Factory,Steel_Axe_Factory):它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
(3) 抽象产品角色(Axe):它是具体产品继承的父类或者是实现的接口。在python中抽象产品一般为父类。
(4) 具体产品角色(Stone_Axe,Steel_Axe):具体工厂角色所创建的对象就是此角色的实例。由一个具体类实现。

二、异常

参考:
Python学习笔记

原文地址:https://www.cnblogs.com/cac2020/p/10819993.html

时间: 2024-08-02 17:14:21

【Python学习之八】设计模式和异常的相关文章

Python学习_07_错误、异常

地毯式地过语法终于快要结束了... Python中的常见异常 1.NameError:尝试访问一个未初始化的变量 2. ZeroDivisionError:除数为0 3. SyntaxError:Python解释器语法错误 4. IndexError:请求的索引超出序列的范围 5. KeyError:请求一个不存在的字典关键字 6. IOError:输入.输出错误 7. AttributeError:尝试访问未知的对象属性 等,这些错误都是来自于Exception类,Exception类和Sys

python学习(八) 异常

8.1 什么是异常 8.2 按自己的方式出错 如何引发异常,以及创建自己的异常类型. 8.2.1 raise语句 >>> raise Exception Traceback (most recent call last): File "<pyshell#130>", line 1, in <module> raise Exception Exception Exception:    所有异常的基类. AttributeError:属性引用或赋

【python学习】8.异常

[python学习]8.异常 raise Exception: 抛出指定异常 try/except: 捕捉异常 except: 第一个参数是需要捕获的异常类型,可以是多个类型组成元组,第二个参数是捕获到的异常对象, raise: 抛出已经捕获的异常 else: 当没有捕获的异常时候执行 finally: 总会被执行 def test(): try: raise Exception("test") except (Exception), e: print "Exception&

python基础教程_学习笔记10:异常

异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行: >>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0 ZeroDivisionError: integer division or modulo by

Java并发学习之八——在线程中处理不受控制的异常

本文是学习网络上的文章时的总结,感谢大家无私的分享. 1.Java里有2种异常: 检查异常:这些异常必须强制捕获她们或在一个方法里的throws子句中. 未检查异常:这些异常不用强制捕获它们. 2.在一个线程对象的run()方法里抛出一个检查异常,我们必须捕获并处理她们.因为run()方法不接受throws子句.当一个非检查异常抛出,默认的的行为是在控制台写下stack trace并退出程序. package chapter; public class Main8 { /** * <p> *

python 学习笔记day06-错误和异常、函数基础

错误和异常 基本概念 错误 从软件方面来说,错误是语法或是逻辑上的 - 语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器无法编译,这些错误必须在程序执行前纠正 - 逻辑错误可能是由于不完整或是不合法的输入所致,还可能十逻辑无法生成.计算,或是输出结果需要的无法执行 异常 当python检测到一个错误时,解释器就会指出当前流已经无法继续执行下去,这时候就出现了异常 异常是因为程序出现了错误而在正常控制流以外采取的行为 这个行为又分为两个阶段: - 首先是引起异常发生的错误 - 然后是检

Python学习—异常

一.异常处理的定义 python解释器检测到错误,触发异常(也允许程序员自己触发异常) 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关) 如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理 二.异常处理的用法 为了保证程序的健壮性与容错性,即在遇到错误时候程序不会崩溃,我们需要对异常进行处理,1,如果错误发生的条件是可预知的,我们需要用if进行处理,在错误发生之前进行预防 age1 = 10 while True: age

Python 学习参考书目推荐

Python 学习,参考书目推荐 前言 好的技术书籍可以帮助我们快速地成长,大部分人或多或少地受益于经典的技术书籍.在「Python开发者」微信公号后台,我们经常能收到让帮忙推荐书籍的消息.这类的问题在@Python开发者 微博 和 伯乐在线的 Python小组 讨论中也不绝于耳. 7月3日,伯乐在线在「Python开发者」微信公号发起了一个讨论 (注:PC端无法看到大家的评论,需要关注微信公号后,从微信才可以看到),通过这个讨论话题,在评论中分享对自己帮助很大的Python技术书籍.  (Py

Python学习手册笔记

之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<Python学习手册(第三版)>.如果只是想快速入门,我在这里推荐了几篇文章,有其他语言编程经验的人简单看一看就可以很快地开始编写Python程序了. 黑体表示章节, 下划线表示可以直接在原文对应位置查到的专有技术名词. 原书配套答案请到http://www.hzbook.com/Books/4572.html下载,简单注册即可. 第三章 如何运行程序 impor