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中实现k-means聚类算法详解
Nov 11 Python
python+matplotlib演示电偶极子实例代码
Jan 12 Python
python针对不定分隔符切割提取字符串的方法
Oct 26 Python
python事件驱动event实现详解
Nov 21 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
使用Python快速制作可视化报表的方法
Feb 03 Python
python实现生成Word、docx文件的方法分析
Aug 30 Python
使用Python+selenium实现第一个自动化测试脚本
Mar 17 Python
Selenium及python实现滚动操作多种方法
Jul 21 Python
详解scrapy内置中间件的顺序
Sep 28 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
Python基础之条件语句详解
Jun 16 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事件驱动化设计详解
2016/11/10 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
jquery键盘事件使用介绍
2011/11/01 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
json中换行符的处理方法示例介绍
2014/06/10 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
Jquery操作Ajax方法小结
2015/11/29 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
2018/08/13 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
在Python中使用HTML模版的教程
2015/04/29 Python
python常见数制转换实例分析
2015/05/09 Python
win与linux系统中python requests 安装
2016/12/04 Python
利用python画一颗心的方法示例
2017/01/31 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
python实现对变位词的判断方法
2020/04/05 Python
python属于解释语言吗
2020/06/11 Python
从python读取sql的实例方法
2020/07/21 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
户籍证明的格式
2014/01/13 职场文书
出生医学证明样本
2014/01/17 职场文书
毕业自我鉴定怎么写
2014/03/25 职场文书
机电系毕业生求职信
2014/07/11 职场文书
2014年党支部工作总结
2014/11/13 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
升职自我推荐信范文
2015/03/25 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书