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爬虫之HTTP异常处理
Nov 05 Python
python实现数组插入新元素的方法
May 22 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
用Python编写一个高效的端口扫描器的方法
Dec 20 Python
在Python中构建增广矩阵的实现方法
Jul 01 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
Python根据服务获取端口号的方法
Sep 25 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 Python
python路径的写法及目录的获取方式
Dec 26 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 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读取flv文件的播放时间长度
2009/09/03 PHP
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
PHP中的use关键字概述
2014/07/23 PHP
PHP实现的简单缓存类
2015/07/29 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
Js之软键盘实现(js源码)
2007/01/30 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
JavaScript实现搜索框的自动完成功能(一)
2016/02/25 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
微信小程序如何获取用户手机号
2018/01/26 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
2018/02/23 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
layer.prompt输入层的例子
2019/09/24 Javascript
python实现自动发送邮件发送多人、群发、多附件的示例
2018/01/23 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
用python代码将tiff图片存储到jpg的方法
2018/12/04 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
pandas中read_csv的缺失值处理方式
2019/12/19 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
Html5之title吸顶功能
2018/06/04 HTML / CSS
h5封装下拉刷新
2020/08/25 HTML / CSS
妇联主席先进事迹
2014/05/18 职场文书
安全教育培训制度
2015/08/06 职场文书
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏