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的更多相关文章

  1. Python说文解字_杂谈05

    1. isinstance和type: is和==符号,is指的是内存地址,是不是一个对象,ID知否相同 集成链 class A: pass class B(A): pass b = B() prin ...

  2. Python说文解字_杂谈09

    1. 元类编程代码分析: import numbers class Field: pass class IntField(Field): # 数据描述符: # 初始化 def __init__(sel ...

  3. Python说文解字_杂谈08

    1. Python变量到底是什么? Python和Java中的变量本质不一样,python的变量实质是一个指针 int str,便利贴 a = 1 # 1. a贴在1上面 # 2. 它的过程是先生成对 ...

  4. Python说文解字_杂谈07

    1. 深入dict from collections.abc import Mapping,MutableMapping # dict 属于mapping类型 a = {} print(isinsta ...

  5. Python说文解字_杂谈01

    1. Python在Ubuntu下面下载Python 2. 安装依赖包 sudo apt-get update sudo apt-get install build-essential python- ...

  6. Python说文解字_杂谈06

    1. 序列类型的分类: 容器类型:list.tuple,deque 扁平序列:str.bytes.bytearray.array.array 可变序列:list.dequte.bytearray.ar ...

  7. Python说文解字_杂谈03

    1. 我们从前面的知识得到,所有的类都要继承自object这个基类(超类),另外我们知道“继承”可以继承类的属性和方法.我们起始通过type创建类的时候,自然而然的也会从ojbect继承他的一些属性和 ...

  8. Python说文解字_杂谈02

    1. Py中三个中啊哟的概念type.object和class的关系. type生成了int生成了1 type->class->obj type用来生成类对象的 object是最顶层的基类 ...

  9. Python说文解字_详解元类

    1.深入理解一切接对象: 1.1 什么是类和对象? 首先明白元类之前要明白什么叫做类.类是面向对象object oriented programming的重要概念.在面向对象中类和对象是最基本的两个概 ...

随机推荐

  1. Spring Boot2(004):关于 Build Systems (构建系统)

    Spring Boot Ref 建议使用 maven 或者 gradle 来进行依赖管理和应用构建. 一.Dependency Management(依赖管理) Spring Boot 的每个版本都会 ...

  2. SpringBoot#自定义配置的封装

    _震惊,开局 不可避免的需要弄一些自定义的配置. 要点: 1. 把配置项都写出来,分析层次关系:2. 抽象成bean与bean之间的关系,写出bean对应的类,这时候配置项对应了bean的属性,属性可 ...

  3. 一百零九、SAP的OO-ALV之三,屏幕绘制器的使用

    一.在Screen页面,点击格式,会打开屏幕绘制器 二.点击定制控制,和PS一样画出一个显示区域的画布容器 三.双击之后,在弹出的属性页面写入一个名字,保存 四.激活屏幕后关闭 五.关闭屏幕绘制器之后 ...

  4. ActiveMQ消息队列和SignalR之日志实时监控及警报小实例

    主要技术: log4net-生成日志. ActiveMQ-生成日志的时候发送消息,并实时监控日志. SignalR-将ActiveMQ监控的日志实时显示到浏览器上,而不用刷新浏览器. 小实例介绍: 左 ...

  5. 细说 OLAP 与 OLTP

    OLAP (Online analytical processing)[联机分析处理] 起源 数据库概念最初源于1962年Kenneth Iverson发表的名为"A Programming ...

  6. django ModelForm在模板中显示中文

    情景再现 修改ModelForm 效果

  7. Python 打开文件(File Open)

    版权所有,未经许可,禁止转载 章节 Python 介绍 Python 开发环境搭建 Python 语法 Python 变量 Python 数值类型 Python 类型转换 Python 字符串(Str ...

  8. spring 动态bean注册

    1. import org.springframework.beans.MutablePropertyValues; import org.springframework.beans.factory. ...

  9. FTP故障排除

    1,ping 检查 IP是否通 禁PING可以使用TCPING 2,服务器端被动模式设置,可设置固定端口号,保证防火墙上该端口畅通 浏览器默认是主动模式 3,使用FLASHFXP软件可以监测到数据端口 ...

  10. MFC双缓冲

    大家都知道包括windows桌面在内我们看到的一切都是系统画上去的,windows桌面就相当于一个黑板: <1>普通绘图就是直接在我们看得到的黑板上绘图 <2>双缓冲就是先在一 ...