# 抽象类或者接口类,制定规范,统一方法名

  1. # # 抽象类或者接口类,制定规范,统一方法名
  2. from abc import ABCMeta,abstractmethod
  3. class Payrole(metaclass=ABCMeta):
  4. @abstractmethod
  5. def pay(self,money):pass
  6.  
  7. class QQpay(Payrole):
  8. def pay(self,money):
  9. print('您已经通过QQ支付了%s元' % money)
  10.  
  11. class Wechatpay(Payrole):
  12. def pay(self,money):
  13. print('您已经通过微信支付了%s元' % money)
  14.  
  15. class Alipay(Payrole):
  16. def pay(self, money):
  17. print('您已经通过支付宝支付了%s元' % money)
  18.  
  19. def pay(obj,money):
  20. obj.pay(money)
  21.  
  22. qq = QQpay()
  23. weixin = Wechatpay()
  24. ali = Alipay()
  25. pay(qq,700)
  26. pay(weixin,600)
  27. pay(ali,400)
  28. pay(ali,900)

# 将方法转换为属性,修改和删除私有方法

  1. # 将方法转换为属性,修改和删除私有方法
  2.  
  3. class People:
  4. def __init__(self, name, age, sex):
  5. self.name = name
  6. self.__age = age
  7. self.__sex = sex
  8. @property
  9. def age(self):
  10. return self.__age
  11.  
  12. @age.setter
  13. def age(self,new_age):
  14. self.__age = new_age
  15.  
  16. @age.deleter
  17. def age(self):
  18. return 789
  19.  
  20. a = People('anthony',19,'男')
  21. # a.age = 21
  22. del a.age
  23. print(a.age)

# 反射(实例化对象、类、当前模块、其他模块)

  1. # 对于实例化对象
  2. class Foo:
  3. f = '类的静态变量'
  4. def __init__(self,name,age):
  5. self.name=name
  6. self.age=age
  7.  
  8. def say_hi(self):
  9. print('hi,%s'%self.name)
  10.  
  11. obj=Foo('egon',73)
  12.  
  13. print(hasattr(obj,'name')) # 判断属性是否存在
  14. print(getattr(obj,'name')) # 获取属性
  15.  
  16. setattr(obj,'oldboy','anthony') # 修改属性
  17. print(getattr(obj,'oldboy'))
  18.  
  19. print(delattr(obj,'name')) # 删除属性
  20. print(getattr(obj,'name'))

实例化对象示例

  1. # 对于类的示例
  2. class Foo(object):
  3. staticField = "old boy"
  4.  
  5. def __init__(self):
  6. self.name = 'wupeiqi'
  7.  
  8. def func(self):
  9. return 'func'
  10.  
  11. @staticmethod
  12. def bar():
  13. return 'bar'
  14.  
  15. print(getattr(Foo,'staticField'))
  16. print(getattr(Foo,'bar'))

类的示例

  1. # 对于当前模块的示例
  2. import sys
  3.  
  4. def s1():
  5. print( 's1')
  6.  
  7. def s2():
  8. print( 's2')
  9.  
  10. this_module = sys.modules[__name__]
  11.  
  12. print(getattr(this_module,'s1'))
  13. print(hasattr(this_module,'s2'))

当前模块的示例

  1. #一个模块中的代码
  2. def test():
  3. print('from the test')
  4. """
  5. 程序目录:
  6. module_test.py
  7. index.py
  8.  
  9. 当前文件:
  10. index.py
  11. """
  12. # 另一个模块中的代码
  13. import module_test as obj
  14.  
  15. #obj.test()
  16.  
  17. print(hasattr(obj,'test'))
  18.  
  19. getattr(obj,'test')()

其他模块的示例

Python 接口类或抽象类 反射的更多相关文章

  1. Python——接口类、抽象类

    建立一个接口类.抽象类的规范 from abc import abstractmethod,ABCMeta class Payment(metaclass=ABCMeta): # 元类 默认的元类 t ...

  2. [ python ] 接口类和抽象类

    接口类 继承有两种用途:1. 继承基类的方法,并且做出自己的改变或者扩展(代码重用)2. 申明某个子类兼容于某基类,定义一个接口类interface,接口类定义了一些接口名且未实现接口的功能,子类继承 ...

  3. python学习之老男孩python全栈第九期_day025知识点总结——接口类、抽象类、多态、封装

    一. 接口类 java:面向对象编程 设计模式 -- 接口类 接口类:python原生不支持 抽象类:python 原生支持的 from abc import abstractclassmethod, ...

  4. Python面向对象之接口类(抽象类)

    Python面向对象之接口类(抽象类):就是制定一个规范. 比如定义了一个接口类(抽象类)(他们是不可以进行实例化的,这就是他为什么是制定一个规范的原因). 他的定义是需要abc模块,要变的就是他的方 ...

  5. Python学习日记(二十五) 接口类、抽象类、多态

    接口类 继承有两种用途:继承基类的方法,并且做出自己的改变或扩展(代码重用)和声明某个子类兼容于某基类,定义一个接口类interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子 ...

  6. day 25-1 接口类、抽象类、多态

    # 接口类:python 原生不支持# 抽象类:python 原生支持的 接口类 首先我们来看一个支付接口的简单例子 from abc import abstractmethod,ABCMeta #我 ...

  7. day25:接口类和抽象类

    1,接口类和抽象类知识背景:一开始在程序界是没有这些概念的,后来就流行了一种语言叫做JAVA,JAVA是一种典型的纯面向对象的语言,JAVA写的程序都是非常适用于更庞大的项目,很多程序员就总结出了一些 ...

  8. 资料整理:python接口类

    1开发原则(七大原则) 一:开放封闭原则 二:接口隔离原则(将不同接口对象一一展现出来,分别调用各自的接口,完成各自的功能) 三:依赖倒置原则 高级模块不能依赖低级模块,可以依赖抽象 规范的定义: 高 ...

  9. python编程设计模式之接口类和抽象类

    接口类 """ 接口类 是一种编程设计模式,在python原本没有接口类 借用Java思想创建的一种规范设计模式 支持多继承,进行多方面规范 ""&q ...

随机推荐

  1. Swift 中实现 Promise 模式

    在异步编程中,除了竟态处理.资源利用以外,另外一个难点就是流程管理.在拥有匿名函数.闭包这些特性的编程语言中,我们通常可以使用回调函数来做一个异步任务完成或失败时的处理.但当我们的业务逻辑逐渐复杂时, ...

  2. PhotoZoom控制面板简介说明

    PhotoZoom是一款极其简单的图片无损放大工具,简单几步渲染出完美的放大照片,呈现无与伦比的画质效果.即可虽然简单,菜单和面板的功能很少,但却是设计师的必备神器,因为其简单易用性,它的软件菜单命令 ...

  3. 配置H3C交换机ftp服务

    配置H3C交换机ftp服务,用于与交换机进行文件上传.下载,常用于更新程序上传及配置备份文件下载. 准备工作:三层设备(路由器.三层交换机等)至少一个接口配置IP,二层交换机需配置一个处于UP状态的v ...

  4. javaee 文件的写入

    package Shurushucu; import java.io.FileNotFoundException; import java.io.FileOutputStream; import ja ...

  5. Linux常用命令速查

    索引表格 命令 功能简述 目录与文件基本操作 pwd 显示当前目录 ls 列出目录和文件名称 cp 复制文件或目录 mv 移动或更名现有的文件或目录 rm 删除文件或目录 mkdir 新建目录 rmd ...

  6. 漫谈 Google 的 Native Client(NaCl) 技术(二)---- 技术篇(兼谈 LLVM)

    转自:http://hzx5.blog.163.com/blog/static/40744388201172531637729/ 漫谈 Google 的 Native Client(NaCl) 技术( ...

  7. babel把ES6转化为ES5的时候报错

    Module not found: Error: Can't resolve '@babel/runtime/helpers/asyncToGenerator' in 'e:\Node.js\Node ...

  8. javascript的带操作符的赋值运算

    看犀牛书发现的问题 下面两个表达式 表达式一 data[i++] *= 2; 表达式二 data[i++] = data[i++] * 2;   var data = [7,8,9]; var i = ...

  9. TFRecords转化和读取

    标准TensorFlow格式 TensorFlow的训练过程其实就是大量的数据在网络中不断流动的过程,而数据的来源在官方文档[^1](API r1.2)中介绍了三种方式,分别是: Feeding.通过 ...

  10. Java基础学习总结(65)——Java中的String,StringBuilder和StringBuffer比较

    字符串,就是一系列字符的集合. Java里面提供了String,StringBuffer和StringBuilder三个类来封装字符串,其中StringBuilder类是到jdk 1.5才新增的.字符 ...