python接口、抽象类与抽象方法
接口:
-url
-数据类型,python不存在
class 类名
1、类中的方法可以写任意多个
2、如果想要对类中的方法做约束,就需要写接口
接口中定义一个方法f1,可以约束继承他的子类
class 接口:
def f1(self):
pass
class 类名(接口):
pass
示例:
class IOrderRepository:(一般接口类默认为I大写开头)
def fetch_one_by(self,nid):
"""
所有继承当前类的类必须实现该方法
"""
raise Execption('子类中必须实现该方法')
class OrderRepository(IOrderRepository):#继承接口
def fetch_one_by(self,nid):
print(123123)
#由于python中无接口类型,所以需要人为的构造出来(在父类接口类中增加异常触发raise Execption('子类中必须实现该方法'))
由于python 没有抽象类、接口的概念,所以要实现这种功能得abc.py 这个类库,具体方式如下
from abc import ABCMeta, abstractmethod #抽象类
class Headers(object):
__metaclass__ = ABCMeta def __init__(self):
self.headers = '' @abstractmethod
def _getBaiduHeaders(self):pass def __str__(self):
return str(self.headers) def __repr__(self):
return repr(self.headers) #实现类
class BaiduHeaders(Headers):
def __init__(self, url, username, password):
self.url = url
self.headers = self._getBaiduHeaders(username, password) def _getBaiduHeaders(self, username, password):
client = GLOBAL_SUDS_CLIENT.Client(self.url)
headers = client.factory.create('ns0:AuthHeader')
headers.username = username
headers.password = password
headers.token = _baidu_headers['token']
return headers
如果子类不实现父类的_getBaiduHeaders方法,则抛出TypeError: Can't instantiate abstract class BaiduHeaders with abstract methods 异常
|
1
2
3
4
5
6
7
8
|
class Foo(object): def exec(self): raise NotImplementedError('请实现exec方法')class A(Foo): passobj=A()obj.exec() |
类A继承类Foo,因而拥有类Foo的所有属性。类A实例化一个对象obj,obj调用exec()方法,如果类A自己没有定义exec方法,就会抛出异常。
|
1
2
3
4
5
6
7
8
9
10
|
from abc import abstractmethod,ABCMetaclass Foo(metaclass=ABCMeta): @abcstractmethod def exec(self): passclass A(Foo): passobj=A() |
从abc模块调用类abstractmethod和类ABCMeta,自己定义类Foo,继承抽象类ABCMeta,在类Foo中定义exec方法,并添加装饰器abcstractmethod。定义类A继承类Foo,并实例化对象obj,类A中必须有类Foo中的方法否则就会抛出异常。
python接口、抽象类与抽象方法的更多相关文章
- Python之抽象类、抽象方法
抽象类中只能有抽象方法,子类继承抽象类时,不能通过实例化使用其抽象方法,必须实现该方法. Python2 class CopyBase(object): def save(self): raise N ...
- 第四百一十二节,python接口,抽象方法抽象类
Python接口 在Python中所谓的接口,有两种,一种是通过url访问的api接口 一种是一个对象的接口 构造接口 class Ijiekou: """ 定义一个约束 ...
- python面向对象 : 抽象类(接口类),多态,封装(私有制封装)
一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...
- [ python ] 接口类和抽象类
接口类 继承有两种用途:1. 继承基类的方法,并且做出自己的改变或者扩展(代码重用)2. 申明某个子类兼容于某基类,定义一个接口类interface,接口类定义了一些接口名且未实现接口的功能,子类继承 ...
- Python面向对象 | 抽象类和接口类
一.抽象类(规范的编程模式) 什么是抽象类 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化.抽象类的本质还是类,指的是一组类的相似性,而接口只强调函数属性的相似性. 为什么要有抽象类 ...
- python 抽象类、抽象方法的实现
由于python 没有抽象类.接口的概念,所以要实现这种功能得abc.py 这个类库,具体方式如下 from abc import ABCMeta, abstractmethod #抽象类 class ...
- java抽象类、抽象方法、接口、实现接口详解
对于java中的抽象类,抽象方法,接口,实现接口等具体的概念就不在这里详细的说明了,网上书本都有很多解释,主要是我懒,下面通过一个例子来说明其中的精髓要点,能不能练成绝世武功,踏上封王之路,就看自己的 ...
- PHP面向对象(抽象类与抽象方法、接口的实现)
一.抽象类与抽象方法 1,任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的. 2,定义为抽象的类不能被实例化. 3, 被定义为抽象的方法只是声明了其调用方式(参数) ...
- python中硬要写抽象类和抽象方法
由于python没有抽象类.接口的概念,所以要实现这种功能得abc.py这个类库,具体方式如下: # coding: utf-8import abc #抽象类class StudentBase(obj ...
随机推荐
- volatile学习
第一.java内存模型 共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见. 从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之 ...
- hive单用户多点模式配置
简介 单用户多点模式也称远程服务模式,用户非java客户端访问元数据库,在服务端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库. mysq ...
- sqli-labs(39)
0X01 这关和38关一样 ?id= and =1 正确 ?id=1 and 1=2 错误 不需要闭合 构造语法 0X02 ?id=;insert into users values(,"z ...
- 利用freemarker生成word,word另存为xml文件的标签解析
http://wenku.baidu.com/link?url=YxTZWVP3ssO-e_Br3LIZVq2xOQnqaSz8gLPiRUDN8NIR_wX2-Z25OqwbVn5kXqGiOFYU ...
- WordPress过滤器(Filters):apply_filters和add_filter
过滤器(Filters)对于WordPress来说是非常重要的,它极大地扩展了WordPress的定制能力,提高了WordPress的灵活性.无论是制作主题还是开发插件,我们基本上都会或多或少地使用到 ...
- C++入门经典-例2.6-简单用cout输出字符
1:代码如下: // 2.6.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- 环信及时通讯 Laravel 扩展包
laravel-easemob 环信及时通讯 laravel 包开发,用于环信用户.群.聊天室等功能 github 地址 安装 加载包 "link1st/laravel-easemob& ...
- weblogic域,管理服务器,受管服务器,集群和机器的基本知识
1.域(Domain) •它是什么? –是一个逻辑上管理的WebLogic Server组,这些组从管理上当作一个整体来操作 •域里面有什么? –服务器 –服务器集群 –机器 •规则: –同一个域中的 ...
- leetcode-easy-string- 38 Count and Say
mycode 91.28% 思路:题意实在太难理解了,尤其是英文又不好,只能参看下别人的资料,理解下规则.终于理解,题意是n=1时输出字符串1:n=2时,数上次字符串中的数值个数,因为上次字符串有 ...
- 关于ArrayList的越界问题?
大家都知道 ArrayList是自动扩容的. 那为什么会存在越界问题? 话不多说 上代码 package test; import java.util.ArrayList; public class ...