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 ...
随机推荐
- 从Spark1.6到Spark2.1,Logging该何去何从
大家都知道spark 1.6.0版本比较稳定,也比较流行. 我们项目组也是,最初用的就是这个版本. 这段时间,项目组引入spark 2.1.0版本,我想尝尝鲜. Pom中刚刚换了dependency马 ...
- MySQL定时任务与存储过程实例
shell 定时任务:/usr/bin/mysql -uroot -pxxxxx databasename -e "update table set ......."mysq ...
- Docker-compose Setup for Self-hosting Development & Deployment Tools
Last week I wrote about my self-hosted Sentry install in 3 Docker containers. This week I want to br ...
- windows server 2008 R2开机进度条闪过后黑屏
起因:想在2008中添加hyper-v角色 事件经过: 1.在服务器管理器中添加hyper-v角色,重启,一直配置失败. 2.在bios开启vt-x,重新添加hyper-v角色,重启,进度条闪一下之后 ...
- ubuntu区域语言(locale)设置(切换为中文)
第一步:编辑文件 代码:sudo gedit /var/lib/locales/supported.d/local (这个文件是所有已经激活的区域语言的列表) 写入相关内容,比如写入如下内容: zh ...
- Java将数据以Excel文件形式导出后台代码实现
下面代码实现所需jar包: tomcat-embed-core-8.5.11.jar: commons-lang3-3.0.1.jar: commons-io-2.5.jar: poi-3.9.jar ...
- mysql出错ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
其他的贴会教你 1.键盘上win+r 2.输入cmd 3.输入net start mysql 但是还是没用 你可以试试 1.右击开始菜单 2.点击windows PowerShell(i) 3.输入 ...
- Git 本地项目添加多个远程仓库
做了一个小玩意儿,是在 码云 上做的仓储: 还想同时放在 github 上做个备份: 就在 github 上创建了一个新的项目地址: 可以看出,官方给了三种导入方式: 1.创建一个新的项目: 2.推送 ...
- Django入门--创建项目及应用
Django是用于后台处理的web应用框架.用户通过浏览器输入网址,向http服务器发起访问网页的请求,http服务器(Apache/Nginx)接收到用户请求后,把请求发送给web应用框架进行处理, ...
- bitset骚操作
bitset的用途挺多的,是一个比较骚的常数优化 一.很多位数的二进制数 poj 2443 http://poj.org/problem?id=2443 直接开个1万位的二进制数,求交就行了. 有关集 ...