Python笔记(二十)_多态、组合】的更多相关文章

多态 对于函数中的变量,我们只需要知道它这个变量是什么类,无需确切地知道它的子类型,就可以放心地调用类的方法,而具体调用的这个方法是作用在父类对象还是子类对象上,由运行时该对象的确切类型决定,这就是多态真正的威力 >>>class Animal: #定义一个父类 def run(self): print('animal is running...') >>>class Dog(Animal): #继承于Animal类 def run(self): print('Dog…
模块 在Python中,一个.py文件就是一个模块 if __name__ == '__main__':所有模块都有一个 __name__ 属性,__name__ 的值取决于如何应用模块 run当前文件时,__name__ 属性的值是 '__main__',此函数被执行: *可用于调试当前文件中的函数 当前文件被其他模块调用时,__name__ 属性的值是该模块的名字,此函数不会被执行: *可以直接被第三方调用 也是因为此,要注意模块被调用时会加载模块,导致这个模块被“执行”,所以要将功能代码块…
属性的魔法方法 __getattribute__(self,name):当该类的属性被访问时,自动触发,是最先被触发的属性方法 __setattr__(self,name,value):当一个属性被设置时,自动触发 __delattr__(self,name):当一个属性被删除时,自动触发 >>>class C: def __getattribute__(self,name): print('getattribute') def __getattr__(self,name): print…
算数运算方法 .反运算方法 以对象A+对象B为例,都是将A作为self值,而B作为other值传入__add__(self,other)方法: 当用户输入A+B,就会调用重写的add方法: >>>class Nint(int): def __add__(self,other): return int.__sub__(self,other) def __sub__(self,other): return int.__add__(self,other) >>>A = Nin…
__init__(self[,...]) __init__和__new__组成python的构造器,但__init__更多的是负责初始化操作,相当于一个项目中的配置文件,__new__才是真正的构造函数,创建并返回一个实例对象,如果__new__只调用了一次,就会得到一个对象 __new__(cls[,...]) 当继承一个不可修改的类,但又想去修改的时候,需要重写__new__方法 >>>class Capstr(str): #str是一个不可修改的类 def __new__(cls,…
迭代器用于遍历容器中的数据,但它不是容器,它是一个实现了__next__方法的对象 与迭代器相关的内置函数: iter(): 将一个对象转换成一个迭代器 next(): 访问迭代器中的下一个变量,直到无可用变量,则抛出StopIteration异常 >>>string = 'demi' >>>name = iter(string) >>>next(name) 'd' >>>next(name) 'e' >>>for…
描述符的属性方法 __get__(self, instance, owner): 用于访问属性,返回属性的值 __set__(self, instance, value): 用于给属性赋值时,返回属性的值 __delete__(self, instance): 用于删除属性时,不返回任何内容 将某种特殊类型的类的实例指派给另一个类的属性(注意:是类属性,不是实例属性),而这种特殊类型的类是实现了__get__,__set__,__delete__这三个方法中的一个或多个,此时这个实例被称为描述符…
本案例介绍从JavaScript中采集加载的数据.更多内容请参考:Python学习指南 #-*- coding:utf-8 -*- import requests import re import time import json #数据下载器 class HtmlDownloader(object): def download(self, url, params=None): if url is None: return None user_agent = 'Mozilla/5.0 (Wind…
1. Code # -*- coding: utf-8 -*- """ 多进程 数据共享 共享变量 Value,Array 逻辑: 2个进程,对同一份数据,一个做加法,一个做加法,各做10次 总结: 1.入口代码 必须放在 if __name__ == '__main__' 下,不然报错,不清楚为什么 用法: 1. 创建共享变量 o = Value('i',1000) or o = Array('i',list) 指定不同的类型 2. 启动子进程通过 o.value or o…
定制容器 容器类型的协议: 定制不可变容器,只需要定义__len__()和__getitem__()方法 定制可变容器,需要定义__len__().__getitem__().__setitem__()和_delitem__()方法 __len__(self): 定义当被len()调用时的行为,返回容器中的个数 __getitem__(self,key): 定义获取容器中指定元素的行为,相当于self[key] __setitem__(self,key,value): 定义设置容器中指定元素的行…