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中for循环详解
Jan 17 Python
python登录豆瓣并发帖的方法
Jul 08 Python
Python每天必学之bytes字节
Jan 28 Python
浅谈Django学习migrate和makemigrations的差别
Jan 18 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
Apr 27 Python
flask-restful使用总结
Dec 04 Python
python根据文章标题内容自动生成摘要的实例
Feb 21 Python
Django框架用户注销功能实现方法分析
May 28 Python
解决django-xadmin列表页filter关联对象搜索问题
Nov 15 Python
python获取百度热榜链接的实例方法
Aug 25 Python
python字典与json转换的方法总结
Dec 28 Python
Pytest实现setup和teardown的详细使用详解
Apr 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
饭制《星际争霸》Mod:优化游戏机制 增加新单位
2017/07/02 星际争霸
PHP安装全攻略:APACHE
2006/10/09 PHP
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
juqery 学习之四 筛选过滤
2010/11/30 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
VUE 3D轮播图封装实现方法
2018/07/03 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
python使用itchat实现手机控制电脑
2018/02/22 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
Python适配器模式代码实现解析
2019/08/02 Python
python 实现简单的FTP程序
2019/12/27 Python
Python模块future用法原理详解
2020/01/20 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
shell的种类有哪些
2015/04/15 面试题
上班玩游戏检讨书
2014/02/07 职场文书
上海世博会口号
2014/06/19 职场文书
幼儿教师暑期培训方案
2014/08/27 职场文书
领导班子个人对照检查剖析材料
2014/09/29 职场文书
考试没考好检讨书
2015/05/06 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书
php访问对象中的成员的实例方法
2021/11/17 PHP