python继承

【python】[scrapy] Object of type 'bytes' is not JSON serializable

匿名 (未验证) 提交于 2019-12-02 22:51:30
#!/usr/bin/env python # -*- coding: utf-8 -*- #json_extention #2014-03-16 #copyright: orangleliu #license: BSD ''''' python中dumps方法很好用,可以直接把我们的dict直接序列化为json对象 但是有的时候我们加了一些自定义的类就没法序列化了,这个时候需要 自定义一些序列化方法 参考: http://docs.python.org/2.7/library/json.html 例如: In [3]: from datetime import datetime In [4]: json_1 = {'num':1112, 'date':datetime.now()} In [5]: import json In [6]: json.dumps(json_1) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) D:\devsofts\python2.7\lib\site-packages\django\core\management\commands\shell.py c in

python 之 初识面向对象

匿名 (未验证) 提交于 2019-12-02 22:51:30
编程的两种范式 我们知道,程序 = 特定的语法+数据结构+算法 好像这个和我们熟知的小说有类似之处啊,小说 = 人物+背景+情节 写小说呢,都是有模板的,so,写程序也是一样,我们把这个“模板”叫做编程范式 主要的编程范式有两种,面相过程编程和面相对象编程 面相过程编程 概念:面向过程又被称为top-down languages, 就是程序从上到下一步步执行,一步步从上到下,从头到尾的解决问题 。基本设计思路就是程序一开始是要着手解决一个大的问题,然后把一个大问题分解成很多个小问题或子过程,这些子过程再执行的过程再继续分解直到小问题足够简单到可以在一个小步骤范围内解决。 面相过程很依赖上下衔接的关系,当我们要对其中一步做改动,或者增加新的步骤,可能会涉及到修改很多地方,所谓,牵一发而动全身! 所以,我们一般认为, 如果你只是 写一些简单的脚本,去做一些一次性任务, 用面向过程的方式是极好的,但如果你要处理的任务是复杂的,且需要不断迭代和维护 的, 那还是用面向对象最方便了。 面相过程编程 概念:OOP(Object Oriented Programing)编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描述。 为什么要用面向对象? 使程序更加容易扩展和易更改,使开发效率变的更高 基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。 面向对象介绍

Python基础一天入门

匿名 (未验证) 提交于 2019-12-02 22:51:30
Python 标识符 在 Python 里,标识符由字母、数字、下划线组成。 在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。 Python 中的标识符是区分大小写的。 以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入; 以双下划线开头的 _ foo 代表类的私有成员;以双下划线开头和结尾的_ foo 代表 Python 里特殊方法专用的标识,如 init () 代表类的构造函数。 行和缩进 学习 Python 与其他语言最大的区别就是,Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断。python 最具特色的就是用缩进来写模块。 缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。 if True: print "True" else: print "False" 如果没有按照这个缩进格式,那么会报错: IndentationError: unindent does not match any outer indentation level错误表明,你使用的缩进方式不一致,有的是 tab 键缩进,有的是空格缩进,改为一致即可。 多行语句

经典Python面试题之Python基础篇

匿名 (未验证) 提交于 2019-12-02 22:51:30
1. 为什么学习Python? 2. 通过什么途径学习的Python? 3. Python和Java、PHP、C、C#、C++等其他语言的对比? 4. 简述解释型和编译型编程语言? 5. Python解释器种类以及特点? 6. 位和字节的关系? 7. b、B、KB、MB、GB 的关系? 8. 请至少列举5个 PEP8 规范(越多越好)。 9. 通过代码实现如下转换: 十进制转换成十六进制:v = 87 10. 请编写一个函数实现将IP地址转换成一个整数。 如 10.3.9.12 转换规则为: 再将以上二进制拼接起来计算十进制结果:00001010 00000011 0000100100001100 = ? 11. python递归的最大层数? 12. 求结果: 13. ascii、unicode、utf-8、gbk 区别? 14. 字节码和机器码的区别? 15. 三元运算规则以及应用场景? 16. 列举 Python2和Python3的区别? 17. 用一行代码实现数值交换: 18. Python3和Python2中 int 和 long的区别? 19. xrange和range的区别? 20. 文件操作时:xreadlines和readlines的区别? 21. 列举布尔值为False的常见值? 22. 字符串、列表、元组、字典每个常用的5个方法? 23.

结构化您的Python工程

匿名 (未验证) 提交于 2019-12-02 22:51:30
我们对于“结构化”的定义是您关注于怎样使您的项目最好地满足它的对象性,我们 需要去考虑如何更好地利用Python的特性来创造简洁、高效的代码。在实践层面, “结构化”意味着通过编写简洁的代码,并且正如文件系统中文件和目录的组织一样, 代码应该使逻辑和依赖清晰。 哪个函数应该深入到哪个模块?数据在项目中如何流转?什么功能和函数应该组合 或独立?要解决这些问题,您可以开始做个一计划,大体来说,即是您的最终产品 看起来会是怎样的。 在这一章节中,我们更深入地去观察Python的模块和导入系统,因为它们是加强您 的项目结构化的关键因素,接着我们会从不同层面去讨论如何去构建可扩展且测试 可靠的的代码。 在一个健康的开发周期中,代码风格,API设计和自动化是非常关键的。同样的,对于工程的 架构 ,仓库的结构也是关键的一部分。 当一个潜在的用户和贡献者登录到您的仓库页面时,他们会看到这些: 工程的名字 工程的描述 一系列的文件 只有当他们滚动到目录下方时才会看到您工程的README。 如果您的仓库的目录是一团糟,没有清晰的结构,他们可能要到处寻找才能找到您写的漂亮的文档。 为您的渴望的事业而奋斗,而不是仅仅只为您现在的工作而工作。 当然,第一印象并不是一切。但是,您和您的同事会和这个仓库并肩战斗很长时间,会熟悉它的每一个角落和细节。拥有良好的布局,事半功倍。 请看这里: 这是 Kenneth

Python面向对象――重写与Super

匿名 (未验证) 提交于 2019-12-02 22:51:30
1本文的意义 如果给已经存在的类添加新的行为,采用继承方案 如果改变已经存在类的行为,采用重写方案 2图解继承、重写与Super 注:上面代码层层关联。super()可以用到任何方法里进行调用,本文只用在了__init__方法中,通过重写和调用super,可以修改所有方法。 上面类的实例化: 3代码验证 class ContactList(list): def search(self, name): matching_contacts = [] for contact in self: if name in contact.name: matching_contacts.append(contact) return matching_contacts class Contact: all_contacts = ContactList() def __init__(self, name, email): self.name = name self.email = email self.all_contacts.append(self) class Friend(Contact): def __init__(self, name, email, phone): super().__init__(name, email) self.phone = phone contact1 =

python自动化基础(参数化)

匿名 (未验证) 提交于 2019-12-02 22:51:30
一、创建加法类 #定义一个数学加法类 class Mathmethod(): def add(self,a,b): return(a+b) def sub(self,a,b): return(a-b) import unittest from HTMLTestRunner import HTMLTestRunner from requesttest.math1.Mathmethod import Mathmethod # 引入Mathmethod模块 #import HTMLTestRunnerNew class TestMathmethod(unittest.TestCase): #超继承(既有父类的特性,又有自己的新特性) #子类有跟父类相同的特性,就会覆盖父类的特性 重写 def __init__(self,methodName,a,b,excepted): super(TestMathmethod,self).__init__(methodName)#超继承父类的初始化函数 self.a=a self.b=b self.excepted=excepted def test_method_add(self): res=Mathmethod().add(self.a,self.b) print('两个数值相加结果是',res) self.assertEqual(self

python继承

匿名 (未验证) 提交于 2019-12-02 22:51:30
一、单继承 子类调用父类的一个方法,可以用super(): class A(object): def pp(self): print('pp A') class B(A): def pp(self): super().pp() print("pp B") b = B() b.pp() #结果: pp A pp B super()常用的方法是在__init__()方法中确保父类被正确的初始化了: super(cls,inst).__init__() #cls,init 可以省略 class A(object): def __init__(self): self.x = 1 class B(A): def __init__(self): super(B,self).__init__() self.x = self.x +1 print(self.x) b = B() #结果 2 也可以直接调用父类的一个方法 : A.__init__(self) class A(object): def __init__(self): self.x = 1 class B(A): def __init__(self): A.__init__(self) self.x = self.x +1 print(self.x) b = B() #结果 2 二、多继承 super()

Python笔记:工厂模式

匿名 (未验证) 提交于 2019-12-02 22:51:30
工厂模式: “工厂”即表示一个负责创建其他类型的对象的类,通常情况下,一个工厂的对象会有一个或多个方法与之关联,这些方法用于创建不同类型的对象,工厂对象会根据客户端给方法传递的不同的参数或者客户端调用不同的方法返回不同的对象。 优点: 对象的创建是可以根据需要单独创建的,但是使用工厂模式来创建对象有以下优点: 松耦合,对象的创建是根据工厂类来进行的,与类本身的实现是独立开来的。 对于客户端来说,不需要知道类的具体实现,只需要调用相应接口就可以得到需要的对象了,这其实是简化了客户端的相关实现。 对于对象的修改只需要在工厂里面进行即可,包括添加新的对象,客户端只需要更改少量的代码,甚至可以不修改代码就可以达到要求。 使用工厂接口,还可以重用已有的对象,不用去别处调用已有的对象或者重新创建一个对象。 工厂模式的3种实现形式(或者说3中变体): 简单工厂模式: 工厂类会提供一个接口,并根据客户端传入参数来创建相应的实例对象。(创建一个对象) 工厂方法模式: 需要定义一个基类,不同的子类则代表着不同类型的对象。相对于简单工厂模式而言,工厂方法模式具有更强的可定制性。(创建一个对象) 抽象工厂模式: 需要定义一个抽象工厂类,然后由不同的子类来创建不同系列的对象,一个系列即代表一组对象。(创建一组对象) 简单工厂模式示例: from abc import ABCMeta ,

python中的MRO算法[转]

匿名 (未验证) 提交于 2019-12-02 22:51:30
MRO(Method Resolution Order):方法解析顺序 。 对于支持继承的编程语言来说,其方法(属性)可能定义在当前类,也可能来自于基类,所以在方法调用时就需要对 当前类和基类进行搜索以确定方法所在的位置。而搜索的顺序就是所谓的「方法解析顺序」(Method Resolution Order,或MRO)。对于只支持单继承的语言来说,MRO 一般比较简单;而对于 Python 这种支持多继承的语言来 说,MRO 就复杂很多。 如果 x 是 D 的一个实例,那么 x.show() 到底会调用哪个 show 方法呢?如果按照 [D, B, A, C] 的搜索顺序,那么 x.show() 会调用 A.show();如果按照 [D, B, C, A] 的搜索顺序,那么 x.show() 会调用 C.show()。由此可见,MRO 是把类的继承关系线性化的一个过程,而线性化方式决定了程序运行过程中具体会调用哪个方法。既然如此,那什么样的 MRO 才是最合理的?Python 中又是如何实现的呢? 经典类(classic class)的深度遍历。 Python 2.2 的新式类(new-style class)预计算。 Python 2.3 的新式类的C3 算法。它也是 Python 3 唯一支持的方式。 Python 有两种类:经典类(classic class)和新式类(new