python实例

Python基础第20天

点点圈 提交于 2020-03-23 06:04:00
面向对象进阶 一: isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo: pass f1=Foo() print(isinstance(f1,Foo)) 2. issubclass(sub, super)检查sub类是否是 super 类的派生类 class Foo: pass f1=Foo() print(isinstance(f1,Foo)) class Bar(Foo): pass b1=Bar() print(issubclass(Bar,Foo)) print(isinstance(b1,Foo)) print(type(b1)) #<class '__main__.Bar'> 二:getattribute class Foo: def __init__(self,x): self.x=x def __getattr__(self, item): print('执行的是getattr') def __getattribute__(self, item): print('执行的是getattribute') raise AttributeError('抛出异常了') f1=Foo(10) f1.xxxxx f1.x

python基础笔记

假如想象 提交于 2020-03-22 11:44:14
1 基本配置及基础语法(1, 2 章) 1 Python.exe 的解释器 options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo 文件) 1.3 –S 不导入 site 模块以在启动时查找 python 路径 1.4 –v 冗余输出(导入语句详细追踪) 1.5 –m mod 将一个模块以脚本形式运行 1.6 –Q opt 除法选项(参阅文档) 1.7 –c cmd 运行以命令行字符串心事提交的 python 脚本 1.8 file 以给定的文件运行 python 脚本 2 _在解释器中表示最后一个表达式的值. 3 print 支持类 c 的 printf 格式化输出: print “%s is number %d!” % (“python”, 1) 4 print 的输入内容后面加逗号, 就会使其输入不换行 5 把输出重定向到日志文件: logfile = open(“c:/1.log”, “a”); //打开文件 c:/1.log 使用 a 模式..即 add, 添加. print >> logfile, “Fatal error: invalid input!”; >>为重定向..将 print 的结果重定向到 logfile, 输 出内容是”Fatal error: invalid input!”… logfile.close(); /

python中静态方法、类方法、属性方法区别

ぐ巨炮叔叔 提交于 2020-03-22 08:28:44
在python中,静态方法、类方法、属性方法,刚接触对于它们之间的区别确实让人疑惑。 类方法(@classmethod) 是一个函数修饰符,表是该函数是一个类方法 类方法第一个参数是cls,而实例方法第一个参数是self(表示该类的一个实例) 类中普通函数至少要一个self参数,代表类对象实例 类方法至少需要一个cls参数,通过cls可以获取到类本身的属性方法等元信息。当有个子类继承时,传入的是子类对象。 对于类方法两种调用方式,类.func(),类实例.func() 静态方法(@staticmethod) 静态方法是不需要类(cls)和类实例(self)参数的。所以它的使用场景是:和类有关系的功能但在运行时又不需要实例和类参与的情况下需要用到静态方法。比如封装一个工具类,一般情况下都可以采用静态方法形式。 静态方法的优点: 代码可读性好:看到该标签就知道这个方法并不需要依赖对象本身的状态。 节省内存空间,既然是与类实例无关自然就不用创建类实例对象。 属性方法(@property) 添加@property标签,表示将一个普通函数变成一个类属性,只读的 https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000

python面向对象之方法

a 夏天 提交于 2020-03-22 08:01:05
类成员:字段+方法+属性 字段:普通(实例对象,每个对象保存一次)+静态(全局变量,只保存一次,所有方法共享) 方法:普通方法(实例方法:self.fun())+类方法(@classmathod)+静态方法(所有方法分类) 属性:方法属性 #1普通方法:(使用较多) #encoding=utf-8 class Foo: def __init__(self, name): self.name = name def ord_func(self): """ 定义普通方法,至少有一个self参数 """ # print self.name print u'普通方法' #2类方法:(不能使用实例) @classmethod def class_func(cls): """ 定义类方法,至少有一个cls参数 """ print u'类方法' #3静态方法:(将分类)(不能使用实例) @staticmethod def static_func(): """ 定义静态方法 ,无默认参数""" print u'静态方法' # 调用普通方法:实例+.+方法 f = Foo("gloryroad") f.ord_func() # 调用类方法:类+.+方法 Foo.class_func() # 调用静态方法: Foo.static_func() 实例: 将两个文件操作方法,一个改成类方法,一个改成静态方法

python-工厂方法模式

核能气质少年 提交于 2020-03-22 05:11:32
源码地址: https://github.com/weilanhanf/PythonDesignPatterns 简单工厂模式的不足: 在简单工厂模式中,只提供了一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须修改工厂类,加入必要的处理逻辑,这违背了“开闭原则”。在简单工厂模式中,所有的产品都是由同一个工厂创建,工厂类职责较重,业务逻辑较为复杂,具体产品与工厂类之间的耦合度高,严重影响了系统的灵活性和扩展性,而工厂方法模式则可以很好地解决这一问题。 说明: 工厂方法模式: 定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。 工厂方法模式就是简单工厂模式的进一步抽像。由于面向对象多态性,工厂方法模式保持了简单工厂的有点同时克服了他的缺点。工厂方法模式中,核心的工厂被提升为一个抽象类,将具体的创建工作交给他的子类完成。这个抽象的工厂类仅规定具体工厂实现的接口,而不明确指出如何实例化一个产品类,这使得工厂方法模式允许系统在不修改原有产品结构的情况下轻松的引进新产品。 抽象工厂模式: 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形式

python序列(六)列表排序

情到浓时终转凉″ 提交于 2020-03-21 18:24:01
  1.sort方法排序原址排序     list.sort(key=None,reverse=False(or True))     当reverse=False时:为正向排序;     当reverse=True时:为反向排序。     默认为False。   2.key:排序关键字,值为一个函数,此函数只有一个参数且返回一个值,比如,有一个User对象的list,希望通过对象的user_id树形进行排序,可以提供一个以User实例作为输入并输出对应user_id值得函数给key(即key=lambda u:uuser_id或key=attrgetter(‘user_id’))   3.执行完后会改变原来的list,如果你不需要原来的list,这种效率稍微高点 >>> list = [1,2,3,4,5,6,7,8,9] >>> list [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> import random>>> random.shuffle(list)    #打乱顺序 >>> list [8, 1, 9, 2, 4, 3, 5, 6, 7] >>> list.sort()          #默认是升序排序 >>> list.sort(reverse = True)  #降序排序 >>> list [9, 8, 7, 6, 5, 4, 3, 2, 1]

python全栈开发day19-面向对象初识

坚强是说给别人听的谎言 提交于 2020-03-21 15:36:22
1.昨日内容回顾   模块: 1.什么是模块,什么是包     py文件就是模块,包是包含一系列py文件(__init__.py)的文件夹。    2.模块的导入相当于相当于执行了导入的模块,首次导入模块,会生成pyc编译文件,模块源文件变动pyc编译文件均能感知到; 编译文件能加快文件的加载效率,不能加快代码的执行效率。 3、sys.path 默认会添加一个当前执行文件所在的目录 4、模块不会重复导入,不能循环引用。 5、导入模块的方法:       #from 。。。import #import 只有import后面的名字会出现在全局命名空间中。 6.模块的属性__name__,       #直接执行一个文件时,这个文件的变量名__name__,都是字符串‘__main__’       #引用一个模块,这个模块的__name__值为模块名    7.导入模块的顺序     # 先写内置模块# 扩展模块# 自定义模块 包     从包中导入模块:     import 精准导入到模块     from import至少导入到模块 #导入包相当于执行这个包下的__init__.py文件。 如果导入包后使用里边的模块的内退,那就要在__init__.py文件做以下操作 绝对导入:如果导入的包和执行文件的相对位置改变了,绝对导入路径会失败。 相对导入:用到了相对导入的文件

Python之绑定方法与非绑定方法

烂漫一生 提交于 2020-03-21 05:48:47
类中定义的函数分成两大类 1、绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入) 1. 绑定到类的方法:用classmethod装饰器装饰的方法。 为类量身定制 类.boud_method(),自动将类当作第一个参数传入 (其实对象也可调用,但仍将类当作第一个参数传入) 2. 绑定到对象的方法:在类内部没有被任何装饰器装饰的方法。 为对象量身定制 对象.boud_method(),自动将对象当作第一个参数传入 (属于类的函数,类可以调用,但是必须按照函数的规则来,没有自动传值那么一说) 绑定给对象的方法(略) 绑定给类的方法(classmethod)   classmehtod是给类用的,即绑定到类,类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入),python为我们内置了函数classmethod来把类中的函数定义成类方法 class Foo(): def bar(self): print('bar') @classmethod # 把一个方法绑定给类:类.绑定到类的方法(),会把类本身当做第一个参数自动传递到类的方法里面 def test(cls,x): print(cls,x) # 拿到一个类的内存地址后,就可以实例化或者引用类的属性了 # # print(Foo.bar) # # print(Foo.test) f

python matplotlib 可视化操作实例

Deadly 提交于 2020-03-21 05:07:03
具体代码: # encoding: utf-8 # coding = utf-8 import sys reload(sys) sys.setdefaultencoding('utf8') from matplotlib.font_manager import FontProperties import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import matplotlib print ( matplotlib.matplotlib_fname() ) #mpl.rcParams['font.family'] = 'sans-serif' #mpl.rcParams['font.sans-serif'] = [u'Simsun'] #mpl.rcParams['axes.unicode_minus'] = False font = FontProperties(fname=r"/Users/zhao/anaconda2/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/Songti.ttc") #font = {'family' : 'SimSun' } #mpl.rc('font', **font) str =""

Python学习之==>面向对象编程(一)

时间秒杀一切 提交于 2020-03-21 01:44:46
一、面向对象与面向过程   面向对象与面向过程是两种不同的编程范式,范式指的是按照什么方式去编程、去实现一个功能。不同的编程范式本质上代表对各种不同类型的任务采取不同的解决问题的思路。 1、面向过程编程   角色是执行者,把一个项目按照一定的顺序,从头到尾一步步执行下去。这种思想好理解,但只要前面一个步骤变了,后面的步骤也要跟着变,维护起来比较麻烦。 2、面向对象编程   角色是指挥者,把一个项目分成一个个小的部分,每个部分负责一方面的功能,整个项目由这些部分组合而成一个整体。类似一个机关,分为各个职能部门,只要符合一定的前提就行。面向对象的思想适合多人分工合作。   面向对象是包含面向过程思路的,比如定义类中的方法,每个小方法、小功能还是面向过程的的思想。   面向对象与面向过程的主要区别就是:面向对象可以使程序更加容易更改和扩展。 二、面向对象的特性 1、类   Class,相当于一个种类、一个模型。一个类就是对一类拥有相同属性的对象的抽象、蓝图、原形。在类中定义了这些对象都具备的属性、共同的方法。 2、对象(实例)   Object,根据模型造出来的具体的东西。一个对象就是一个类实例化后实例。一个类必须经过实例化后才能在程序中调用,一个类可以实例化多个对象,每个对象也可以有不同的属性。(对象就是实例,两者是一个意思) 3、实例化   初始化一个类,创造一个对象