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实现的检测web服务器健康状况的小程序
Sep 17 Python
python常规方法实现数组的全排列
Mar 17 Python
Python全局变量用法实例分析
Jul 19 Python
python使用fcntl模块实现程序加锁功能示例
Jun 23 Python
Python编程实现使用线性回归预测数据
Dec 07 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 Python
Python标准库shutil模块使用方法解析
Mar 10 Python
Django 自定义权限管理系统详解(通过中间件认证)
Mar 11 Python
Python做图像处理及视频音频文件分离和合成功能
Nov 24 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 14 Python
讲解Python实例练习逆序输出字符串
May 06 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类(查找/修改)xml文档
2013/03/26 PHP
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
php变量与JS变量实现不通过跳转直接交互的方法
2017/08/25 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
prototype Element学习笔记(Element篇三)
2008/10/26 Javascript
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
js实现自定义路由
2017/02/04 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
vue实现循环切换动画
2018/10/17 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
python实现斐波那契递归函数的方法
2014/09/08 Python
Python专用方法与迭代机制实例分析
2014/09/15 Python
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
机器学习python实战之决策树
2017/11/01 Python
Sanic框架流式传输操作示例
2018/07/18 Python
Python Gitlab Api 使用方法
2019/08/28 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
keras.layer.input()用法说明
2020/06/16 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
HR喜欢的自荐信格式
2013/10/08 职场文书
高三体育教学反思
2014/01/29 职场文书
毕业生就业推荐表自我鉴定
2019/06/20 职场文书