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打开文件并获取文件相关属性的方法
Apr 23 Python
python数据分析数据标准化及离散化详解
Feb 26 Python
Python 批量合并多个txt文件的实例讲解
May 08 Python
在Python中实现shuffle给列表洗牌
Nov 08 Python
Python图像滤波处理操作示例【基于ImageFilter类】
Jan 03 Python
Python Matplotlib实现三维数据的散点图绘制
Mar 19 Python
对django views中 request, response的常用操作详解
Jul 17 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
python实现高斯判别分析算法的例子
Dec 09 Python
TensorBoard 计算图的可视化实现
Feb 15 Python
解决import tensorflow as tf 出错的原因
Apr 16 Python
Keras之fit_generator与train_on_batch用法
Jun 17 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文本操作类
2006/11/25 PHP
深入php之规范编程命名小结
2013/05/15 PHP
PHP中文乱码解决方案
2015/03/05 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
jquery 中ajax执行的优先级
2015/06/22 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
2015/12/07 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
2019/11/13 Javascript
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
Python面向对象程序设计示例小结
2019/01/30 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
函授自我鉴定
2013/11/06 职场文书
监理资料员岗位职责
2014/01/03 职场文书
家长给孩子的表扬信
2014/01/17 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
先进单位事迹材料
2014/12/25 职场文书
2016年“我们的节日·清明节”活动总结
2016/04/01 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
MongoDB数据库之添删改查
2022/04/26 MongoDB