python继承

设计模式(python描述)

前提是你 提交于 2019-11-29 15:05:18
目录 一、创建型设计模式 二、结构型设计模式 三、行为型设计模式 一、创建型设计模式 1、简单工厂模式 内容: 不直接向高层类暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例。 角色: 工厂角色(Creator) 抽象产品角色(Product) 具体产品角色(Concrete Product) python示例: from abc import ABCMeta, abstractmethod class Payment(metaclass=ABCMeta): """ 抽象产品角色 # 抽象类,必须子类必须实现这个方法。 """ @abstractmethod def pay(self, money): pass class Alipay(Payment): """ 具体产品角色 """ def __init__(self, huabei=False): self.huabei = huabei def pay(self, money): if slelf.huabei: print("花呗支付%d元" % money) else: print("支付宝支付%d元" % money) class WechatPay(Payment): def pay(self, money): print("微信支付%d元" % money) class PaymentFactory

python代码规范和命名规范

情到浓时终转凉″ 提交于 2019-11-29 14:31:01
一、简明概述 1、编码 如无特殊情况, 文件一律使用 UTF-8 编码 如无特殊情况, 文件头部必须加入 #-*-coding:utf-8-*- 标识 2、代码格式 2.1、缩进 统一使用 4 个空格进行缩进 2.2、行宽 每行代码尽量不超过 80 个字符(在特殊情况下可以略微超过 80 ,但最长不得超过 120) 理由: 这在查看 side-by-side 的 diff 时很有帮助 方便在控制台下查看代码 太长可能是设计有缺陷 2.3、引号 简单说,自然语言使用双引号,机器标示使用单引号,因此 代码里 多数应该使用 单引号 自然语言 使用双引号 "..." 例如错误信息;很多情况还是 unicode,使用 u"你好世界" 机器标识 使用单引号 '...' 例如 dict 里的 key 正则表达式 使用原生的双引号 r"..." 文档字符串 (docstring) 使用三个双引号 """......""" 2.4、空行 模块级函数和类定义之间空两行; 类成员函数之间空一行; class A: def __init__(self): pass def hello(self): pass def main(): pass 可以使用多个空行分隔多组相关的函数 函数中可以使用空行分隔出逻辑相关的代码 2.5、编码 文件使用 UTF-8 编码 文件头部加入 #-*-conding:utf-8

python中的枚举类和元类

北慕城南 提交于 2019-11-29 14:22:36
当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份: JAN = 1 FEB = 2 MAR = 3 . . . NOV = 11 DEC = 12 好处是简单,缺点是类型是int,并且仍然是变量。 更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功能: from enum import Enum Month = Enum ( 'Month' , ( 'Jan' , 'Feb' , 'Mar' , 'Apr' , 'May' , 'Jun' , 'Jul' , 'Aug' , 'Sep' , 'Oct' , 'Nov' , 'Dec' ) ) 这样我们就获得了Month类型的枚举类,可以直接使用Month.Jan来引用一个常量,或者枚举它的所有成员: for name , member in Month . __members__ . items ( ) : print ( name , '=>' , member , ',' , member . value ) value属性则是自动赋给成员的int常量,默认从1开始计数。 如果需要更精确地控制枚举类型,可以从Enum派生出自定义类: from enum import Enum , unique @unique class

Python 异常处理

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-29 14:05:26
Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。 异常处理: 本站Python教程会具体介绍。 断言(Assertions):本站Python教程会具体介绍。 python标准异常 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIteration 迭代器没有更多的值 GeneratorExit 生成器(generator)发生异常来通知退出 StandardError 所有的内建标准异常的基类 ArithmeticError 所有数值计算错误的基类 FloatingPointError 浮点计算错误 OverflowError 数值运算超出最大限制 ZeroDivisionError 除(或取模)零 (所有数据类型) AssertionError 断言语句失败 AttributeError 对象没有这个属性 EOFError 没有内建输入,到达EOF 标记 EnvironmentError 操作系统错误的基类 IOError 输入/输出操作失败 OSError 操作系统错误 WindowsError 系统调用失败

python 面向对象

此生再无相见时 提交于 2019-11-29 13:56:21
面向对象(类编程) 简介:全称Object Oriented Programing(OOP) ,是一种程序设计思想,面向对象编程 面向对象名词简介 借鉴 菜鸟教程 类(class) :类事抽象的模板,用来描述具有相同属性和方法的对象的集合。定义了集合中每个对象所拥有的方法,对象是类的实例 方法 :类中自定义的函数 类变量 :类变量在整个实例化的对象中是公用的,每个对象都可以调用类变量。类变量定义在类中且函数体之外。类变量通常不作为实例变量使用 数据成员 :类变量或者实例变量用于处理类及实例对象所使用的相关数据 方法重写 :如果从父类继承的方法不能满足子类的需求,可以对齐进行重新,这个过程叫做方法的覆盖,也叫做方法的重写 局部变量 :定义在方法中的变量,只作用与当前实例的类 实例变量 :在类的声明中,属性是用变量来表示的。这种变量也叫做实例变量 继承 :既一个派生类(同有的方法调用另一个类),继承基类(例如Person)的字段和方法。例如:A类和B类都需要调用相同的方法,既创建C类,把相同的方法放到C类,A类和B类继承C类,A类和B类就可以直接调用C类的方法了 实例化 :创建一个类的实例,类的具体对象,例如:人类是一个类的集合,你不知道里边有谁谁谁,但是我如果说马云,你肯定就想到了他的身高,长相,money等等,这个过程也叫做实例化 对象 :也叫做 实例 ,通过类定义的数据结构实例

python 面向对象之多态

不问归期 提交于 2019-11-29 13:56:18
多态 多态指的是一类事物有多种形态 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(self): print('say hello') class Dog(Animal): #动物的形态之二:狗 def talk(self): print('say wangwang') class Pig(Animal): #动物的形态之三:猪 def talk(self): print('say aoao') 文件有多种形态:文本文件,可执行文件 import abc class File(metaclass=abc.ABCMeta): #同一类事物:文件 @abc.abstractmethod def click(self): pass class Text(File): #文件的形态之一:文本文件 def click(self): print('open file') class ExeFile(File): #文件的形态之二:可执行文件 def click(self): print('execute file') 多态性 一

python 面向对象之封装

好久不见. 提交于 2019-11-29 13:56:13
封装 面向对象三大特性: 继承 封装 多态 隐藏对象的属性和实现细节,仅对外提供公共访问方法 广义上的封装 : 把方法和变量都封装在类中 狭义上的封装 : 在类的外部干脆不能调用了 优点 将变化隔离 便于使用 提高复用性 提高安全性 封装原则: 将不需要对外提供的内容隐藏起来 把属性都隐藏,提供公共方法对齐访问 私有变量和私有方法 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) 代码实例 # 其实这仅仅这是一种变形操作 # 类中所有双下划线开头的名称如__x都会自动变形成:_类名__x的形式: class Student: def __init__(self,name): self.__name = name def get_name(self): return self.__name def set_name(self,value): if type(value) is str: self.__name =value mhy = Student('mhy') print(mhy.get_name()) mhy.set_name('alex') print(mhy.get_name()) print(mhy.__name) #A._Student__name是可以访问到的,即这种操作并不是严格意义上的限制外部访问,仅仅只是一种语法意义上的变形 # print

python 面向对象之继承

我是研究僧i 提交于 2019-11-29 13:56:06
继承 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为 基类 或 超类 ,新建的类称为 派生类 或 子类 python中类的继承分为:单继承和多继承 class ParentClass1: #定义父类 pass class ParentClass2: #定义父类 pass class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass pass class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类 pass 提示:如果没有指定基类,python的类会默认继承object类,object是所有python类的基类,它提供了一些常见方法(如 __str__ )的实现 >>> ParentClass1.__bases__ (<class 'object'>,) >>> ParentClass2.__bases__ (<class 'object'>,) 抽象与继承(先抽象再继承) 抽象即抽取类似或者说比较像的部分。 抽象分成两个层次: 将奥巴马和梅西这俩对象比较像的部分抽取成类; 将人,猪,狗这三个类比较像的部分抽取成父类。 抽象最主要的作用是划分类别(可以隔离关注点,降低复杂度) 继承

python object类

我与影子孤独终老i 提交于 2019-11-29 13:55:46
object类 object是python的默认类,有很多的方法,python种默认的list,str,dict等等都是继承了object类的方法 继承了object的类属于新式类 ,没有继承属于经典类 在python3种默认都是新式类,也即是所有的自定义类,基类都会继承object类 描述 在python3.x的所有类都是object的子类 所以对于一些内置的方法会写在object类中 如果子类不定义,在调用的时候最终会调用object类中的方法 就不会让程序出现不必要的错误了 __init__方法就是其中的一个例子 所有继承了object类的类 ---- 新式类 在python2中 不继承object类的都是 经典类 格式 class A(object): pass # 新式类 class A: pass # 经典类 :在多继承中遵循深度优先 # 经典类中没有super和mro方法 总结 所有的py3中 的类都继承object 是新式类 在继承中 遵循 广度优先的 C3算法 也可以使用mro来查看继承顺序 super这个方法 可以帮助我们查找到mro顺序中的下一个类 来源: https://www.cnblogs.com/Hybb/p/11518961.html

Python 面向对象总结

╄→гoц情女王★ 提交于 2019-11-29 13:55:27
面向对象 类 class 类型 类变量 实例方法 init attack bite 类指针 - 指向父类 对象 对象指针 实例变量 self.name slef.age 组合 一个对象作为一个属性 self.course = python 继承 class Foo:pass class Son(Foo):pass Son是子类\派生类 Foo是父类\超类\基类 继承的特点: 如果多个类都用到了相同的方法\属性 我们应该把这些共用的方法抽象到他们的父类中去 减少代码的冗余 先写子类的功能,发现重复才创建父类 子类自己没有某一个方法或者属性的时候用父类的 如果自己有 还像用父类的 在子类中直接调用父类的方法就可以了 来源: https://www.cnblogs.com/Hybb/p/11518963.html