python继承

Python爬虫scrapy框架的源代码分析

北城以北 提交于 2019-11-26 16:57:29
scrapy框架流程图 推荐三个网址:官方1.5版本:https://doc.scrapy.org/en/latest/topics/architecture.html 点击打开链接 官方0.24版本(中文):https://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/architecture.html 点击打开链接 scrapy中文网1.5版本:http://www.scrapyd.cn/doc/137.html 点击打开链接 图十分的重要 创建项目与配置环境后各部分组件: 上图主要是关于各个组件的作用! 下面是部分组件的详情: 首先主要是项目写代码部分: 项目名.py(eg:baidu.py) 项目一百度——eg:baidu.py # -*- coding: utf-8 -*- import scrapy # scrapy: 是一个基于异步+多线程的方式运行爬虫的框架,内部的函数都是以回调的形式执行的,不能手动调用。 class BaiduSpider(scrapy.Spider): # name: 自定义的爬虫名称,运行爬虫的时候就通过这个name的值运行的。name的值是唯一的。 name = 'baidu' # allowed_domains:允许访问的网站的域名。没有设置的无法访问。 allowed_domains = [

python编程技巧——转载

梦想与她 提交于 2019-11-26 16:28:37
学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过在discuz论坛中自动登录自动发贴的脚本,写过自动收邮件的脚本,写过简单的验证码识别的脚本,本来想写google music的抓取脚本的,结果有了强大的gmbox,也就不用写了。 这些脚本有一个共性,都是和web相关的,总要用到获取链接的一些方法,再加上simplecd这个半爬虫半网站的项目,累积不少爬虫抓站的经验,在此总结一下,那么以后做东西也就不用重复劳动了。 1.最基本的抓站 Python import urllib2 content = urllib2.urlopen(' http://XXXX').read () 1 2 import urllib2 content = urllib2.urlopen(' http://XXXX').read () 2.使用代理服务器 这在某些情况下比较有用,比如IP被封了,或者比如IP访问的次数受到限制等等。 Python import urllib2 proxy_support = urllib2.ProxyHandler({'http':' http://XX.XX.XX.XX:XXXX '}) opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler) urllib2

python第8天面向对象

强颜欢笑 提交于 2019-11-26 14:33:22
一、简单的定义类 1.定义类,把分析的对象编程代码 class Book: def __init__(self,title,price,author):#构造函数,用来初始化函数,实例初始化时直接写在括号里不用麻烦 1.此函数只是用来初始化值用的 self.title=title#可把self理解为book1,即book1的标题等于传过来的标题 self.price=price self.author=author 2.对象的行为,可以自己定义函数,会自己默认加上self,表示通过实例区调用 def print_info(self): print('当前这本书的信息如下') print('标题:{}'.format(self.title)) print('价格:{}'.format(self.price)) print('作者:{}'.format(self.author)) 2.实例化 book1=Book('python',22,'小王') print(book1.title,book1.author,book1.price) 初始化后信息也可以更改 book1.price=32 book1.print_info() 二、全局属性与实例属性 class Book: 带有self的属性都是跟实例有关,如果要定义一个全局的属性,则不能加self count=0

python 24 封装、多态

喜夏-厌秋 提交于 2019-11-26 14:30:55
目录 1. 封装、多态 2. 鸭子类型--Duck typing 3. 类的约束 5. super深度剖析 1. 封装、多态 封装:将代码、数据放入一个容器空间中,并且可以使用. 多态:一个事物可以呈现多种形态。 python默认支持多态,一个变量可以指向多种数据类型。 2. 鸭子类型--Duck typing python崇尚鸭子类型(编码思路)。 "鸭子类型"像多态一样工作,但是没有继承。 看起来像“鸭子”,其实就是“鸭子”; 定义:A、B类没有耦合性,但A、B类里面具有相同的方法,则称A、B互为“鸭子”,在某种意义上统一了标准。 虽然A、B两个类没有关系,但是统一两个类中相似方法的方法名,在某种意义上统一了标准。 例如:字符串、列表、元组的index方法,名字相同,作用相似,但不是一个index。 3. 类的约束 # 方法一:python语言惯于使用的一种约束方式,在父类主动抛出错误 # raise Exception("主动报错"),放在父类中,前提是已制定了相应的规则 class Payment: def pay(self,money): raise Exception("子类要使用pay方法") # 主动抛出约束错误,如果子类不使用pay方法,报错 class QQpay(Payment): # 鸭子类型 def pay(self, money): print(f

学习 Python day3

廉价感情. 提交于 2019-11-26 14:25:33
求面积 class Mianji(object): def __init__(self,a,b,c,d): self.a = a self.b = b self.c = c self.d = d @staticmethod def is_valid(a,b,c,d): for i in [b,c,d]: if i !=a: return False else: return True def area(self): if res == True: area_=self.a * self.b return area_ mianji = Mianji(2,2,2,2) res = mianji.is_valid(2,2,2,2) if res == True: print(mianji.area()) 类的继承 class A(object): def __init__(self): self.a = 100 def A1(self): print('A1') class B(A): def __init__(self): A.__init__(A) self.b = 200 def B1(self): print('B1') b_ = B() print(b_.a) b_.A1() 例子 class A(object): def __init__(self): self.a =

2019.8.8 python day03

好久不见. 提交于 2019-11-26 14:10:28
基础知识: %s :和字符串拼接 %d :和整型拼接 %f :和浮点型拼接 % :取余 // :整除 ** :平方 静态调用: @staticmethod 和静态方法比较类似,Python还可以在类中定义类,如下: @classmethod 获取自身类(cls)中的属性,并且可以更改. classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等 继承 类名__init__(self) 提供继承信息的我们称之为父类;得到继承信息的我们称之为子类。子类除了继承父类提供的属性和方法,还可以定义自己特有的属性和方法,所以子类比父类拥有的更多的能力。 在类名中写上继承的类. 私有变量不可被继承 列表生成式和生成器 列表生成式: 优点:计算速度快 缺点:较为浪费内存 生成器: 优点:节约内存空间 缺点:计算速度慢 装饰器 来源: https://www.cnblogs.com/violet23/p/11323426.html

python装饰

烂漫一生 提交于 2019-11-26 14:08:44
# 装饰器 def Joker(func): ​ def warp(n1,n2,n3): ​ num = n1 + n2 ​ return func(0,num,n3) ​ return warp #*装饰器将前两个数字求和,函数本身第三个参数乘上这个和* @Joker def SUM(num1,num2,num3): ​ print(num1,num2,num3) ​ print(num2 * num3) SUM(10,2,3) @property装饰器 之前我们讨论过Python中属性和方法访问权限的问题,虽然我们不建议将属性设置为私有的,但是如果直接将属性暴露给外界也是有问题的,比如我们没有办法检查赋给属性的值是否有效。我们之前的建议是将属性命名以单下划线开头,通过这种方式来暗示属性是受保护的,不建议外界直接访问,那么如果想访问属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作。如果要做到这点,就可以考虑使用@property包装器来包装getter和setter方法,使得对属性的访问既安全又方便,代码如下所示。 class Person(object): def __init__(self, name, age): self._name = name self._age = age # 访问器 - getter方法 @property def

Python — 面向对象进阶2

为君一笑 提交于 2019-11-26 14:08:35
静态调用 """ 正方形的例子,如果类中需要非该类成员存在,则可以使用静态调用的方法@staticmethod """ class Joker(object): def __init__(self,a,b,c,d): self.a = a self.b = b self.c = c self.d = d @staticmethod def is_valid(a,b,c,d): for i in [b,c,d]: if i != a: return False else: return True def area(self): if res == True: area_ = self.a * self.b return area_#输出的方法一 joker = Joker(2,2,2,2) res = joker.is_valid(2,2,2,2) if res == True: print(joker.area()) #输出的方法二 def amin(): joker = Joker(2,2,2,2) res = joker.is_valid(2,2,2,2) if res == True: print(joker.area()) amin() 继承 """ 继承 """ class A(object): def __init__(self): self.a = 100 self

Python 03

╄→尐↘猪︶ㄣ 提交于 2019-11-26 14:07:05
继承和多态 刚才我们提到了,可以在已有类的基础上创建新类,这其中的一种做法就是让一个类从另一个类那里将属性和方法直接继承下来,从而减少重复代码的编写。提供继承信息的我们称之为父类,也叫超类或基类;得到继承信息的我们称之为子类,也叫派生类或衍生类。子类除了继承父类提供的属性和方法,还可以定义自己特有的属性和方法,所以子类比父类拥有的更多的能力,在实际开发中,我们经常会用子类对象去替换掉一个父类对象,这是面向对象编程中一个常见的行为,对应的原则称之为里氏替换原则。下面我们先看一个继承的例子。 class Person(object): """人""" def __init__(self,name,age): self._name = name self.age = age @property def name(self): return self._name @property def age(self): return self._age @age.setter def grade(self, grade): self._grade = grade def study(self, course): print('%s的%s正在学习%s.' % (self._grade, self._name, course)) class Teacher(Person) def __init__

python day3

余生颓废 提交于 2019-11-26 14:05:18
静态方法: #静态方法 class A(object): @staticmethod #静态方法 def a():    #定义的此方法的参数不含self print("A")    #不属于类,不能直接调用,要使用静态方法通过给类发消息,才能调用 joker = A() joker.a() 继承: class fulei(object): def __init__(self): self.a=100 self.b=3 def _Sum(self): Sum=self.a+self.b print(Sum) class zilei(fulei): def __init__(self): fulei.__init__(self) #super(zilei,self).__init__(self) self.aa=200 def lala(self): print("haha") Zilei=zilei() print(Zilei.a)#通过子类继承父类中的a(私有变量不能被继承)如果使用访问器即可被继承 函数闭包: 不带参数的闭包: def foo(): def bar(): return "hello" return bar f1=foo() print(f1()) '''执行原理:(执行函数用()调用,所以执行函数的函数也要用(),所以print(f1())) print(f1(