Python抽象和自定义类定义与用法示例


Posted in Python onAugust 23, 2018

本文实例讲述了Python抽象和自定义类定义与用法。分享给大家供大家参考,具体如下:

抽象方法

class Person():
  def say(self):
    pass
class Student(Person):
  def say(self):
    print("i am student")

抽象类: 包含抽象方法的类

  • 抽象类可以包含非抽象方法
  • 抽象类可以有方法和属性
  • 抽象类不能进行实例化
  • 必须继承才能使用,且继承的子类必须实现所有抽象方法
import abc
class Person(metaclass=abc.ABCMeta):
  @abc.abstractmethod
  def say(self):
    pass
class Student(Person):
  def say(self):
    print("i am student")
s = Student()
s.say()

补充:函数名和当做变量使用

class Student():
  pass
def say(self):
  print("i am say")
s = Student()
s.say=say
s.say(9)

组装类

from types import MethodType
class Student():
  pass
def say(self):
  print("i am say")
s = Student()
s.say=MethodType(say,Student)
s.say()

元类

# 类名一般为MetaClass结尾
class StudentMetaClass(type):
  def __new__(cls, *args, **kwargs):
    print("元类")
    return type.__new__(cls, *args, **kwargs)
class Teacher(object, metaclass=StudentMetaClass):
  pass
t = Teacher()
print(t.__dict__)

附:python 抽象类、抽象方法的实现示例

由于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  异常

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python中反射用法实例
Mar 27 Python
使用Python对Csv文件操作实例代码
May 12 Python
python 如何快速找出两个电子表中数据的差异
May 26 Python
pandas 使用apply同时处理两列数据的方法
Apr 20 Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
python字典的setdefault的巧妙用法
Aug 07 Python
Golang GBK转UTF-8的例子
Aug 26 Python
python 命令行传入参数实现解析
Aug 30 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 Python
python代码中怎么换行
Jun 17 Python
通过实例解析python subprocess模块原理及用法
Oct 10 Python
Python引用计数操作示例
Aug 23 #Python
python实现括号匹配的思路详解
Aug 23 #Python
使用Python实现一个栈判断括号是否平衡
Aug 23 #Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 #Python
示例详解Python3 or Python2 两者之间的差异
Aug 23 #Python
Django 限制用户访问频率的中间件的实现
Aug 23 #Python
浅谈Django的缓存机制
Aug 23 #Python
You might like
一个简单的自动发送邮件系统(二)
2006/10/09 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
wordpress之js库集合研究介绍
2007/08/17 Javascript
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
Extjs学习笔记之六 面版
2010/01/08 Javascript
JavaScript中为元素加上name属性的方法
2011/05/09 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
jQuery基础知识小结
2014/12/22 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python访问sqlserver示例
2014/02/10 Python
用Python计算三角函数之acos()方法的使用
2015/05/15 Python
Python打包可执行文件的方法详解
2016/09/19 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
Pycharm之快速定位到某行快捷键的方法
2019/01/20 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
Python json格式化打印实现过程解析
2020/07/21 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
幼儿园小班见习报告
2014/10/31 职场文书