Python说文解字_杂谈04
1. 鸭子类型:
当你看到一只鸟走来像鸭子,游泳起来像鸭子,叫起来也像鸭子,他么他就可以叫做鸭子。任何可迭代的对象。一样的方法,可以用可迭代的话,就可以迭代的组合打印。__getitem__可以塞到任何的类中,跟鸭子类型一样,指定相同的方法名。魔法函数正是充分运用了鸭子类型,能够被本身调用。
class Cat(object):
def say(self):
print("i am a cat") class Dog(object):
def say(self):
print("i am a dog") def __getitem__(self, item):
return "bobby" class Duck(object):
def say(self):
print("i am a duck") animal_lst = [Cat,Dog,Duck]
for animal in animal_lst:
animal().say() class Company:
def __init__(self,employee_list):
self.employee = employee_list def __getitem__(self, item):
return self.employee[item] a = ["bobby1","bobby2"]
b = ["bobby2","bobby"]
name_tuple = ("bobby3","bobby4")
name_set = set()
name_set.add("bobby5")
name_set.add("bobby6")
# a.extend(b)
# a.extend(name_tuple)
company = Company(["a",[b],"c"])
a.extend(company)
print(a)
2. 抽象基类(abc模块):
abstract base class
可以当做接口。Py的抽象基类也不能实例化的。
变量在Py当中就是一个符号。可以指向任何对象。
Py信奉的是鸭子类型。把鸭子类型放在第一位。
# 我们去检查某个类是否具有某种方法。(应用场景一) class Company(object):
def __init__(self,employee_list):
self.employee = employee_list def __len__(self):
return len(self.employee) com = Company(['bobby1','bobby2'])
print(hasattr(com,"__len__"))
# 我们在某些情况之下希望判定某个对象的类型
from collections.abc import Sized
isinstance(com,Sized) # 我们需要强制某个子类必须去实现某些方法
# 实现了web框架,继承cache(redis,cache,memerycache)
# 需要设计一个抽象基类,执行子类必须实现某些方法 # 如何去模拟一个抽象基类
import abc
# metaclass=abc.ABCMeta
class CacheBase(metaclass=abc.ABCMeta):
@abc.abstractmethod
def get(self, key):
pass @abc.abstractmethod
def set(self, key, value):
pass class RediCache(CacheBase):
def set(self, key, value):
pass def get(self, key):
pass redis_cache = RediCache()
redis_cache.set("key","value")
记住:抽象的是基类:必须metaclass = abc.ABCMeta
记住:抽象基类后有abc.abstractmethod抽象方法,和,abcabstractpropery抽象属性。
记住:抽象基类的主要作用是“定义”接口。
记住:用的是import abc这个抽象基类,而不是from collections.abc import abc
记住:使用__subclasshook__后只要具体类定义了与抽象类相同的方法就认为是他的子类
import abc class A(object):
__metaclass__ = abc.ABCMeta @abc.abstractmethod
def say(self):
return 'say yeah' @classmethod
def __subclasshook__(cls, C):
if cls is A:
if any("say" in B.__dict__ for B in C.__mro__):
return True
return NotTmplementd class B(object):
def say(self):
return 'hello' print issubclass(B, A) # True
print isinstance(B(), A) # True
print B.__dict__ # {'say': <function say at 0x7f...>, ...}
print A.__subclasshook__(B) # True
__mro__ 表示多继承的顺序。
Python说文解字_杂谈04的更多相关文章
- Python说文解字_杂谈05
1. isinstance和type: is和==符号,is指的是内存地址,是不是一个对象,ID知否相同 集成链 class A: pass class B(A): pass b = B() prin ...
- Python说文解字_杂谈09
1. 元类编程代码分析: import numbers class Field: pass class IntField(Field): # 数据描述符: # 初始化 def __init__(sel ...
- Python说文解字_杂谈08
1. Python变量到底是什么? Python和Java中的变量本质不一样,python的变量实质是一个指针 int str,便利贴 a = 1 # 1. a贴在1上面 # 2. 它的过程是先生成对 ...
- Python说文解字_杂谈07
1. 深入dict from collections.abc import Mapping,MutableMapping # dict 属于mapping类型 a = {} print(isinsta ...
- Python说文解字_杂谈01
1. Python在Ubuntu下面下载Python 2. 安装依赖包 sudo apt-get update sudo apt-get install build-essential python- ...
- Python说文解字_杂谈06
1. 序列类型的分类: 容器类型:list.tuple,deque 扁平序列:str.bytes.bytearray.array.array 可变序列:list.dequte.bytearray.ar ...
- Python说文解字_杂谈03
1. 我们从前面的知识得到,所有的类都要继承自object这个基类(超类),另外我们知道“继承”可以继承类的属性和方法.我们起始通过type创建类的时候,自然而然的也会从ojbect继承他的一些属性和 ...
- Python说文解字_杂谈02
1. Py中三个中啊哟的概念type.object和class的关系. type生成了int生成了1 type->class->obj type用来生成类对象的 object是最顶层的基类 ...
- Python说文解字_详解元类
1.深入理解一切接对象: 1.1 什么是类和对象? 首先明白元类之前要明白什么叫做类.类是面向对象object oriented programming的重要概念.在面向对象中类和对象是最基本的两个概 ...
随机推荐
- 安装部署及升级到Exchange Server 2010
本文档详细的描述了,如何在Windows Server 2008 R2的环境下安装Exchange Server 2010,包括的内容有: 先检查组织环境: 1.请确保林的功能级别至少为 Wind ...
- 第三篇:Vue指令
Vue指令 1.文本指令相关 v-*是Vue指令,会被vue解析,v-text="num"中的num是变量(指令是有限的,不可以自定义) v-text是原样输出渲染内容,渲染控制的 ...
- jQuery原理系列-Dom Ready
ready事件是jquery的一个很重要的功能,在很久很久以前,我们是使用window.onload监听页面加载成功的,onload事件的好处是你不用考虑浏览器兼容性,也不需要依赖任何框架就可以写,但 ...
- 第二阶段scrum-5
1.整个团队的任务量: 2.任务看板: 会议照片: 产品状态: 注册登陆界面功能正在实装,前端制作完成 数据库配置中
- java菜鸡循环练习
While 循环练习 输入3次密码,则打印密码锁定 package com.lv.test; import java.util.Scanner; public class DemoPass { pu ...
- HDU - 4082 Hou Yi's secret
题意:射箭落在n个点,任取三点可构成一个三角形,问最大的相似三角形集(一组互相相似的三角形)的个数. 分析: 1.若n个点中有相同的点,要去重,题目中说射箭会形成洞,任选三个洞构成三角形,因此射在同一 ...
- hibernate注解 笔记
1.hibernate使用@where实现条件过滤功能 其里面只有一个参数clause,完整用法是: @Where(clause = "VALID_FLAG=1") 可以加在实体类 ...
- Java算法练习——整数转罗马数字
题目链接 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 ...
- CSS3 之高级动画(6)CSS3 clip-path属性实现的几何图形变形动画
clip-path 属性介绍: clip-path属性可以创建一个只有元素的部分区域可以显示的剪切区域. 区域内的部分显示,区域外的隐藏. 剪切区域是被引用内嵌的URL定义的路径或者外部svg的路径. ...
- SourceTree - 对Git的使用
SourceTree - 对Git的使用 一 .SourceTree简介 SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端,拥有可视化界面,容易上手操作 ...