Python 接口类或抽象类 反射
# 抽象类或者接口类,制定规范,统一方法名
- # # 抽象类或者接口类,制定规范,统一方法名
- from abc import ABCMeta,abstractmethod
- class Payrole(metaclass=ABCMeta):
- @abstractmethod
- def pay(self,money):pass
- class QQpay(Payrole):
- def pay(self,money):
- print('您已经通过QQ支付了%s元' % money)
- class Wechatpay(Payrole):
- def pay(self,money):
- print('您已经通过微信支付了%s元' % money)
- class Alipay(Payrole):
- def pay(self, money):
- print('您已经通过支付宝支付了%s元' % money)
- def pay(obj,money):
- obj.pay(money)
- qq = QQpay()
- weixin = Wechatpay()
- ali = Alipay()
- pay(qq,700)
- pay(weixin,600)
- pay(ali,400)
- pay(ali,900)
# 将方法转换为属性,修改和删除私有方法
- # 将方法转换为属性,修改和删除私有方法
- class People:
- def __init__(self, name, age, sex):
- self.name = name
- self.__age = age
- self.__sex = sex
- @property
- def age(self):
- return self.__age
- @age.setter
- def age(self,new_age):
- self.__age = new_age
- @age.deleter
- def age(self):
- return 789
- a = People('anthony',19,'男')
- # a.age = 21
- del a.age
- print(a.age)
# 反射(实例化对象、类、当前模块、其他模块)
- # 对于实例化对象
- class Foo:
- f = '类的静态变量'
- def __init__(self,name,age):
- self.name=name
- self.age=age
- def say_hi(self):
- print('hi,%s'%self.name)
- obj=Foo('egon',73)
- print(hasattr(obj,'name')) # 判断属性是否存在
- print(getattr(obj,'name')) # 获取属性
- setattr(obj,'oldboy','anthony') # 修改属性
- print(getattr(obj,'oldboy'))
- print(delattr(obj,'name')) # 删除属性
- print(getattr(obj,'name'))
实例化对象示例
- # 对于类的示例
- class Foo(object):
- staticField = "old boy"
- def __init__(self):
- self.name = 'wupeiqi'
- def func(self):
- return 'func'
- @staticmethod
- def bar():
- return 'bar'
- print(getattr(Foo,'staticField'))
- print(getattr(Foo,'bar'))
类的示例
- # 对于当前模块的示例
- import sys
- def s1():
- print( 's1')
- def s2():
- print( 's2')
- this_module = sys.modules[__name__]
- print(getattr(this_module,'s1'))
- print(hasattr(this_module,'s2'))
当前模块的示例
- #一个模块中的代码
- def test():
- print('from the test')
- """
- 程序目录:
- module_test.py
- index.py
- 当前文件:
- index.py
- """
- # 另一个模块中的代码
- import module_test as obj
- #obj.test()
- print(hasattr(obj,'test'))
- getattr(obj,'test')()
其他模块的示例
Python 接口类或抽象类 反射的更多相关文章
- Python——接口类、抽象类
建立一个接口类.抽象类的规范 from abc import abstractmethod,ABCMeta class Payment(metaclass=ABCMeta): # 元类 默认的元类 t ...
- [ python ] 接口类和抽象类
接口类 继承有两种用途:1. 继承基类的方法,并且做出自己的改变或者扩展(代码重用)2. 申明某个子类兼容于某基类,定义一个接口类interface,接口类定义了一些接口名且未实现接口的功能,子类继承 ...
- python学习之老男孩python全栈第九期_day025知识点总结——接口类、抽象类、多态、封装
一. 接口类 java:面向对象编程 设计模式 -- 接口类 接口类:python原生不支持 抽象类:python 原生支持的 from abc import abstractclassmethod, ...
- Python面向对象之接口类(抽象类)
Python面向对象之接口类(抽象类):就是制定一个规范. 比如定义了一个接口类(抽象类)(他们是不可以进行实例化的,这就是他为什么是制定一个规范的原因). 他的定义是需要abc模块,要变的就是他的方 ...
- Python学习日记(二十五) 接口类、抽象类、多态
接口类 继承有两种用途:继承基类的方法,并且做出自己的改变或扩展(代码重用)和声明某个子类兼容于某基类,定义一个接口类interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子 ...
- day 25-1 接口类、抽象类、多态
# 接口类:python 原生不支持# 抽象类:python 原生支持的 接口类 首先我们来看一个支付接口的简单例子 from abc import abstractmethod,ABCMeta #我 ...
- day25:接口类和抽象类
1,接口类和抽象类知识背景:一开始在程序界是没有这些概念的,后来就流行了一种语言叫做JAVA,JAVA是一种典型的纯面向对象的语言,JAVA写的程序都是非常适用于更庞大的项目,很多程序员就总结出了一些 ...
- 资料整理:python接口类
1开发原则(七大原则) 一:开放封闭原则 二:接口隔离原则(将不同接口对象一一展现出来,分别调用各自的接口,完成各自的功能) 三:依赖倒置原则 高级模块不能依赖低级模块,可以依赖抽象 规范的定义: 高 ...
- python编程设计模式之接口类和抽象类
接口类 """ 接口类 是一种编程设计模式,在python原本没有接口类 借用Java思想创建的一种规范设计模式 支持多继承,进行多方面规范 ""&q ...
随机推荐
- Swift 中实现 Promise 模式
在异步编程中,除了竟态处理.资源利用以外,另外一个难点就是流程管理.在拥有匿名函数.闭包这些特性的编程语言中,我们通常可以使用回调函数来做一个异步任务完成或失败时的处理.但当我们的业务逻辑逐渐复杂时, ...
- PhotoZoom控制面板简介说明
PhotoZoom是一款极其简单的图片无损放大工具,简单几步渲染出完美的放大照片,呈现无与伦比的画质效果.即可虽然简单,菜单和面板的功能很少,但却是设计师的必备神器,因为其简单易用性,它的软件菜单命令 ...
- 配置H3C交换机ftp服务
配置H3C交换机ftp服务,用于与交换机进行文件上传.下载,常用于更新程序上传及配置备份文件下载. 准备工作:三层设备(路由器.三层交换机等)至少一个接口配置IP,二层交换机需配置一个处于UP状态的v ...
- javaee 文件的写入
package Shurushucu; import java.io.FileNotFoundException; import java.io.FileOutputStream; import ja ...
- Linux常用命令速查
索引表格 命令 功能简述 目录与文件基本操作 pwd 显示当前目录 ls 列出目录和文件名称 cp 复制文件或目录 mv 移动或更名现有的文件或目录 rm 删除文件或目录 mkdir 新建目录 rmd ...
- 漫谈 Google 的 Native Client(NaCl) 技术(二)---- 技术篇(兼谈 LLVM)
转自:http://hzx5.blog.163.com/blog/static/40744388201172531637729/ 漫谈 Google 的 Native Client(NaCl) 技术( ...
- babel把ES6转化为ES5的时候报错
Module not found: Error: Can't resolve '@babel/runtime/helpers/asyncToGenerator' in 'e:\Node.js\Node ...
- javascript的带操作符的赋值运算
看犀牛书发现的问题 下面两个表达式 表达式一 data[i++] *= 2; 表达式二 data[i++] = data[i++] * 2; var data = [7,8,9]; var i = ...
- TFRecords转化和读取
标准TensorFlow格式 TensorFlow的训练过程其实就是大量的数据在网络中不断流动的过程,而数据的来源在官方文档[^1](API r1.2)中介绍了三种方式,分别是: Feeding.通过 ...
- Java基础学习总结(65)——Java中的String,StringBuilder和StringBuffer比较
字符串,就是一系列字符的集合. Java里面提供了String,StringBuffer和StringBuilder三个类来封装字符串,其中StringBuilder类是到jdk 1.5才新增的.字符 ...