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的Django框架中实现Hacker News的一些功能
Apr 17 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
Dec 22 Python
python 获取网页编码方式实现代码
Mar 11 Python
python协程之动态添加任务的方法
Feb 19 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
详解如何用TensorFlow训练和识别/分类自定义图片
Aug 05 Python
Django中的cookie和session
Aug 27 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
Nov 08 Python
Python使用pymysql模块操作mysql增删改查实例分析
Dec 19 Python
python为什么会环境变量设置不成功
Jun 23 Python
Python3+Flask安装使用教程详解
Feb 16 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 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
sae使用smarty模板的方法
2013/12/17 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
PHP中isset与array_key_exists的区别实例分析
2015/06/02 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
jQuery实现当按下回车键时绑定点击事件
2014/01/28 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
原生JS实现ajax与ajax的跨域请求实例
2017/12/01 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
js验证身份证号码记录的方法
2019/04/26 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
Python中函数的用法实例教程
2014/09/08 Python
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
python占位符输入方式实例
2019/05/27 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
初中同学聚会邀请函
2014/02/03 职场文书
学校招生宣传广告词
2014/03/19 职场文书
捐助倡议书范文
2014/04/15 职场文书
大队干部竞选演讲稿
2014/04/28 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
安全先进班组材料
2014/12/26 职场文书
党员检讨书范文
2014/12/27 职场文书
医德医风自我评价2015
2015/03/03 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
员工考勤管理制度
2015/08/06 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技