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程序设计入门(1)基本语法简介
Jun 13 Python
Python中datetime模块参考手册
Jan 13 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
Python实现的根据IP地址计算子网掩码位数功能示例
May 23 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
Python Opencv提取图片中某种颜色组成的图形的方法
Sep 19 Python
详细分析Python垃圾回收机制
Jul 01 Python
Python通用唯一标识符uuid模块使用案例
Sep 10 Python
python xlsxwriter模块的使用
Dec 24 Python
Python可视化神器pyecharts之绘制箱形图
Jul 07 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
cakephp打印sql语句的方法
2015/02/13 PHP
javascript 表单的友好用户体现
2009/01/07 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
js的2种继承方式详解
2014/03/04 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
2016/09/04 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
JavaScript定时器实现的原理分析
2016/12/06 Javascript
Angular组件化管理实现方法分析
2017/03/17 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
小程序自定义模板实现吸顶功能
2020/01/08 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
JS实现分页导航效果
2020/02/19 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
Python生成pdf文件的方法
2014/08/04 Python
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
分享一下Python数据分析常用的8款工具
2018/04/29 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
卡拉威高尔夫官方网站:Callaway Golf
2020/09/16 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
几个Linux面试题笔试题
2012/12/01 面试题
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
音乐系毕业生自荐信
2013/10/27 职场文书
社区庆八一活动方案
2014/02/02 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
2014年街道办事处工作总结
2014/12/11 职场文书
英文自荐信范文
2015/03/25 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
python微信智能AI机器人实现多种支付方式
2022/04/12 Python