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 相关文章推荐
Python3 能振兴 Python的原因分析
Nov 28 Python
Python Web框架Flask中使用新浪SAE云存储实例
Feb 08 Python
Python字符串详细介绍
May 09 Python
Python实现获取照片拍摄日期并重命名的方法
Sep 30 Python
利用python批量修改word文件名的方法示例
Oct 17 Python
Python中getpass模块无回显输入源码解析
Jan 11 Python
基于循环神经网络(RNN)的古诗生成器
Mar 26 Python
pygame游戏之旅 如何制作游戏障碍
Nov 20 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
Python如何省略括号方法详解
Mar 21 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 Python
Python实现排序方法常见的四种
Jul 15 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
几个php应用技巧
2008/03/27 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
php处理restful请求的路由类分享
2014/02/27 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
Extjs中常用表单介绍与应用
2010/06/07 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
Vue2单一事件管理组件通信
2017/05/09 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
重学JS 系列:聊聊继承(推荐)
2019/04/11 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
Python编程对列表中字典元素进行排序的方法详解
2017/05/26 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
自我评价个人范文
2013/12/16 职场文书
群教个人对照检查材料
2014/08/20 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
承兑汇票转让证明怎么写?
2014/11/30 职场文书
国庆阅兵观后感
2015/06/15 职场文书
浅谈MySQL函数
2021/10/05 MySQL
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL