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中的pprint折腾记
Jan 21 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
python  创建一个保留重复值的列表的补码
Oct 15 Python
python统计中文字符数量的两种方法
Jan 31 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
Dec 10 Python
Python代码中如何读取键盘录入的值
May 27 Python
学习Python爬虫的几点建议
Aug 05 Python
浅析python 通⽤爬⾍和聚焦爬⾍
Sep 28 Python
Python基础之pandas数据合并
Apr 27 Python
Python实现socket库网络通信套接字
Jun 04 Python
Python MNIST手写体识别详解与试练
Nov 07 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扩展介绍与开发教程
2010/08/19 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
php获取淘宝分类id示例
2014/01/16 PHP
PHP实现在线阅读PDF文件的方法
2015/06/23 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
php测试kafka项目示例
2020/02/06 PHP
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
关于JS与jQuery中的文档加载问题
2017/08/22 jQuery
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
bootstrap Table的一些小操作
2017/11/01 Javascript
Angular6中使用Swiper的方法示例
2018/07/09 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
Python 闭包的使用方法
2017/09/07 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
Python argparse模块应用实例解析
2019/11/15 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
亿企通软件测试面试题
2012/04/10 面试题
保密协议书范本
2014/04/22 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
护士个人总结范文
2015/02/13 职场文书
处罚决定书范文
2015/06/24 职场文书
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python