python面向对象类的约束和设计的统一化规范
.封装
- 定义:将一些东西内容封存到一个地方,你还可以再取出,
- 类设置静态属性,设置一些方法
- 对象可以在其对象空间中封装一些属性
2.多态
- 定义:一个事物的多种形态
- 就想a可以是一个字符串,可以是一个列表等等,不像Java中定义时必须声明变量类型
- Python默认支持多态
3.鸭子类型
Python中你看起来像鸭子,那么你就是鸭子
统一化规范
例子:支付统一使用同一个接口
# class QQpay:
# def pay(self, money):
# print(f'利用qq支付了{money}')
# class Alipay:
# def pay(self, money):
# print(f'利用支付宝支付了{money}')
# 支付功能 规划一下
# def pay(obj,money): # 归一化设计
# obj.pay(money)
# obj1 = QQpay()
# obj2 = Alipay()
# pay(obj1,100)
# pay(obj2,200)
4.约束
让具有同一功能的类拥有同一个基类,在基类中对子类进行提示性约束和强制性约束
提示性约束
class Payment:
# def pay(self,money): # 约定俗称定义一种规范,子类要定义pay方法.
# raise Exception('子类必须定义此方法') # class QQpay(Payment):
#
# def pay(self, money):
# print(f'利用qq支付了{money}')
#
#
# class Alipay(Payment):
#
# def pay(self, money):
# print(f'利用支付宝支付了{money}')
#
# # class Wechatpay(Payment):
# # def pay(self,money):
# # print(f'利用微信支付了{money}')
#
# class Wechatpay(Payment):
# def fuqian(self,money):
# print(f'利用微信支付了{money}')
# # 支付功能 规划一下
# def pay(obj,money,choice): # 归一化设计
# obj.pay(money)
# choice = input('qq,weixin,zhifubao')
# obj3 = Wechatpay()
# pay(obj3,300)
# obj3.fuqian(300)
# # print(11)
# raise TypeError('代码格式错误')
# print(222)
# 第一种约束: 在父类定义一个pay方法,主动抛出异常,如果子类没有定义pay方法,并且沿用了父类的pay方法
# 即会报错. python推荐的一种约束方式.
强制性约束
from abc import ABCMeta,abstractmethod
# class Payment(metaclass=ABCMeta):
# # 抽象类 接口类 规范和约束 metaclass指定的是一个元类
# @abstractmethod
# def pay(self, money):
# pass # 抽象方法
#
#
# class QQpay(Payment):
#
# def pay(self, money): # print(f'利用qq支付了{money}')
#
# class Alipay(Payment): # def pay(self, money):
# print(f'利用支付宝支付了{money}')
#
# # class Wechatpay(Payment): # # def pay(self,money):
# # print(f'利用微信支付了{money}') # class Wechatpay(Payment): # def fuqian(self,money):
# print(f'利用微信支付了{money}')
#
# # def pay(self,money):
# # pass # obj3 = Wechatpay()
# 利用抽象类的概念: 基类如上设置,子类如果没有定义pay方法,在实例化对象时就会报错.
5.super的深入理解
# class A:
# def f1(self):
# print('in A')
# class Foo(A):
# def f1(self):
# super(Foo,self).f1()
# print('in Foo') # 2
# class Bar(A):
# def f1(self):
# print('in Bar') # 1
# class Info(Foo,Bar):
# def f1(self):
# super(Info,self).f1()
# print('in Info f1') # 3
# obj = Info()
# print(Info.mro()) # [Info, Foo, Bar, A]
# obj.f1()
# super() 严格意义并不是执行父类的方法.
# 单继承: super() 肯定是执行父类的方法.
# 多继承: super(S,self) 严格按照self从属于的类的mro的执行顺序,执行 S类的下一位.
class A:
def f1(self):
print('in A') class Foo(A): def f1(self):
super().f1()
print('in Foo') class Bar(A):
def f1(self): # self = obj
print('in Bar') class Info(Foo,Bar): def f1(self): # self = obj
super(Foo,self).f1()
print('in Info f1') obj = Info() # [Info, Foo, Bar, A]
obj.f1()
# 多继承: super(S,self) 严格按照self从属于的类的mro的执行顺序,执行 S类的下一位.
python面向对象类的约束和设计的统一化规范的更多相关文章
- python面向对象(类和对象及三大特性)
类和对象是什么 创建类 新式类 和 经典类 面向对象三大特性 继承 封装 多态 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象(类的特殊成员)
python 面向对象: (思维导图 ↑↑↑↑) 类的特殊成员 python的类成员存在着一些具有特殊含义的成员 1.__init__: 类名() 自动执行 __init__ class Foo(ob ...
- python面向对象(类的成员及类方法)
类的普通成员 字段 方法 属性 类的高级成员 静态字段 静态方法 属性方法 类方法 类成员修饰符 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中, ...
- Python面向对象 --- 类的设计和常见的内置方法
面向对象:一种基于面向过程的新的编程思想.也就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种 ...
- python面向对象——类
from:http://www.runoob.com/python3/python3-class.html Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在P ...
- python 面向对象(类)
面向对象,即是将具备某种共性的事物抽象成一个类(模板),然后再根据类来创建实例对象进行具体的使用. 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写, ...
- python 面向对象类与类之间的关系
主要内容: 1. 依赖关系 2. 关联关系, 组合关系, 聚合关系 3. 继承关系 4. 类中的特殊成员 引子 大千世界, 万物之间皆有规则和规律,我们的类和对象是对大千世界中的所有事物进行归类. 那 ...
- python面向对象——类和对象
一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程(流水线式) 优点:极大的降低了程序的复杂度 缺点:应用场景固定住了,可扩展性差 2.函数式编程 特点: a ...
- Python——面向对象(类)的基础疑难点
相信用Python写def函数大家都信手拈来了,但Python作为面向对象的编程语言,怎么能浪费呢? 那问题来了.什么是类呢?什么是实例?什么是对象?方法是什么??属性又是什么???继承?封装?多态? ...
随机推荐
- 2020/1/28 PHP代码审计之命令执行漏洞
0x00 命令执行漏洞原理 应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system.exec.shell_exec.passthru.popen.proc_popen等函数可以执行 ...
- [FJOI2015]火星商店问题(线段树分治+可持久化Trie)
重新写一年前抄题解的那题,当时我啥都不会只是Ctrl+C,Ctrl+V写过的题,今天重新写一遍. 题解: 不会线段树分治,还是学一下这东西吧,这是我的第一道线段树分治. 首先对于特殊商品,可以直接可持 ...
- 当初对"软件工程"这个专业的期待和想象是什么?
很多期待,很多幻想 印象很深刻的初中语文老师让我们背诵的一首诗<错误>: <错误> 作 者:郑愁予 我打江南走过 那等在季节里的容颜如莲花的开落 东风不来,三月的柳絮不飞 你底 ...
- Spring Cloud Alibaba 教程 | Nacos(二)
源码解析客户端注册过程 nacos作为注册中心,包含了nacos服务端(注册中心服务)和nacos客户端,nacos注册中心服务上面一讲已经介绍过了它是一个用Java语言编写开源web项目,并且拥有自 ...
- 将元素平分成差值最小的两个集合(DP)
现有若干物品,要分成较为平均的两部分,分的规则是这样的: 1)两部分物品的个数最多只能差一个. 2)每部分物品的权值总和必须要尽可能接近. 现在请你编写一个程序,给定现在有的物品的个数以及每个物品的权 ...
- 虚拟机virtualBox
在笔记本了装了一个虚拟机, 并安装了Linux系统, 方便测试linux 命令. 考虑到不需要图形界面, 学习了用命令行操作虚拟机, 配置如下 linux 下安装openssh-server 虚拟机设 ...
- PAT Basic 1020 ⽉饼 (25) [贪⼼算法]
题目 ⽉饼是中国⼈在中秋佳节时吃的⼀种传统⻝品,不同地区有许多不同⻛味的⽉饼.现给定所有种类⽉饼的库存量.总售价.以及市场的最⼤需求量,请你计算可以获得的最⼤收益是多少. 注意:销售时允许取出⼀部分库 ...
- [Typora ] LaTeX公式输入
[Typora 笔记] 数学输入整理 1.希腊字母表 大写 md 小写 md \(A\) A \(\alpha\) \alpha \(B\) B \(\beta\) \beta \(\Gamma\) ...
- c#学习笔记02——接口
本身并不实现功能,但提供一种模板定义,为从它继承类或结构提供了一种定义的规范 有了接口,程序员可以把程序定义的更积极啊清晰和条理化 理解接口 接口支持多继承:抽象类不能实现多继承 接口只能定义抽象规则 ...
- placeholder在IE下的兼容问题
最近写项目要求兼容到ie8,写完了去ie测试的时候,发现了placeholder在ie下的兼容问题,为了解决,搜罗网上各种牛人的解决方案,自己总结如下: css样式(设置各浏览器下placeholde ...