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求两个文本文件以行为单位的交集、并集与差集的方法
Jun 17 Python
Python实现查找系统盘中需要找的字符
Jul 14 Python
Python实现ssh批量登录并执行命令
Oct 25 Python
简单谈谈python中的多进程
Nov 06 Python
浅谈编码,解码,乱码的问题
Dec 30 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
python学生信息管理系统
Mar 13 Python
python实现矩阵打印
Mar 02 Python
Pytorch之保存读取模型实例
Dec 30 Python
Python爬取股票信息,并可视化数据的示例
Sep 26 Python
如何用Django处理gzip数据流
Jan 29 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 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
php下获取客户端ip地址的函数
2010/03/15 PHP
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
PHP递归的三种常用方式
2019/02/28 PHP
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
小型js框架veryide.librar源代码
2009/03/05 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
javascript闭包的高级使用方法实例
2013/07/04 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
AngularJS入门教程之链接与图片模板详解
2016/08/19 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
wxpython中利用线程防止假死的实现方法
2014/08/11 Python
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
详解Python3.1版本带来的核心变化
2015/04/07 Python
详解Python中的日志模块logging
2015/06/19 Python
python取代netcat过程分析
2018/02/10 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
python区分不同数据类型的方法
2019/10/14 Python
在tensorflow以及keras安装目录查询操作(windows下)
2020/06/19 Python
Python pip安装第三方库实现过程解析
2020/07/09 Python
挖掘机司机岗位职责
2014/02/12 职场文书
趣味运动会活动方案
2014/02/12 职场文书
人事部专员岗位职责
2014/03/04 职场文书
财产公证书样本
2014/04/04 职场文书
销售岗位职责范本
2014/06/12 职场文书
创先争优演讲稿
2014/09/15 职场文书
个人年终总结结尾
2015/03/06 职场文书
工厂采购员岗位职责
2015/04/07 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
Python深度学习之实现卷积神经网络
2021/06/05 Python
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android