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): pass obj = 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,ABCMeta class Foo(metaclass = ABCMeta): @abcstractmethod def exec ( self ): pass class A(Foo): pass obj = 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 ...
随机推荐
- 9.Python关键字(保留字)一览表
保留字是 Python 语言中一些已经被赋予特定意义的单词,这就要求开发者在开发程序时,不能用这些保留字作为标识符给变量.函数.类.模板以及其他对象命名. Python 包含的保留字可以执行如下命令进 ...
- 剑指offer-Q60 n个骰子的点数
python版本代码 g_maxValue = 6 # 单个骰子最大的点数 def PrintProbability(number): ''' :param number: 骰子的个数 :return ...
- 分布式-信息方式-JMS大纲
一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息, ...
- Spring boot之JPA
JPA 步骤: (1)在pom.xml添加mysql,spring-data-jpa依赖 (2)在application.properties文件中配置mysql连接配置文件 (3)在applicat ...
- ubuntu16.04增大swap空间
参见->这里 参见->这里
- centos6.9 samba配置
https://blog.csdn.net/qq_33468857/article/details/75431813 1 使用用户名密码访问 [global] security = user [hom ...
- IntentService和HandlerThread
上一篇说了说android 系统的UI更新机制.核心点围绕在Looper的使用上.主线程运行起来后,初始化并运行一个静态Looper,H类(handler子类)处理各种事件. 16ms的UI upda ...
- leetcode-easy-trees-102. Binary Tree Level Order Traversal-YES
mycode 98.56% # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x ...
- hibernate本地验证
下载hibernate验证文件,将其拷贝到工程根目录 下,验证中这样写 <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/H ...
- SAE中Python无法创建多线程的解决方案
最近在SAE上开发了一个给kindle退送书的小公众号(kindle免费书库),由于微信对http响应时间 有限制,而推送本身是发邮件,当附件一大就很容易超时而使得用户收不到应答.一开始我是想通过多线 ...