编程原则
java具有自己的编程原则和设计模式,不能多继承。
python的编程原则:
1.开放封闭原则:开放是对扩展是开放的,封闭是对修改是封闭的(已经写完的代码程序是不能修改的)。
2.依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该应该依赖细节;细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程

from abc import ABCMeta,abstractmethod
class Payment(metaclass=ABCMeta): # 创建一个规范,抽象类或接口类 metaclass指定的是一个元类
@abstractmethod
def pay(self):pass # 加上装饰器pay变成抽象方法 class Alipay(Payment):
def pay(self,money):
print('使用支付宝支付了%s元' %money)
class QQpay(Payment):
def pay(self,money):
print('使用QQ支付了%s元' %money)
class Wechatpay(Payment):
def fuqian(self,money):
print('使用微信支付了%s元' %money) def pay(obj,money):
obj.pay(money) w = Wechatpay()
pay(w,100) #Can't instantiate abstract class Wechatpay with abstract methods pay
3.接口隔离原则:使用多个专门的接口,而不使用单一的总接口。即客户端不应该依赖那些不需要的接口。
接口
python中没有接口,接口的概念是Java里来的,因为Java没有多继承,接口可以实现多继承。
借口类的作用:
1.在Java中能够满足接口隔离原则,且完成多继承的约束。
2.在python中,满足借口隔离原则,由于python本身支持多继承,所以就不需要接口这个概念了。
归一化设计:不管是哪个类的对象,都调用同一个函数去完成相似的功能。
class Alipay():
def pay(self,money):
print('使用支付宝支付了%s元' %money)
class QQpay():
def pay(self,money):
print('使用QQ支付了%s元' %money) def pay(obj,money):obj.pay(money)
a = Alipay()
pay(a,100) #用pay这个函数来调用
抽象类和接口类的区别:
1.在python中没什么不同,都是用来约束子类中的方法,只要是抽象类和接口类中被abstractmethod装饰的方法,都需要被子类实现,
需要注意的是,当多个类之间有相同的功能也有不同的功能的时候,应该采用多个接口类来进行分别的约束。
2.在Java中抽象类的本质是一个类,必须遵循单继承的规则,所以一个子类如果被抽象类约束,那么他只能被一个父类控制。
当多个类之间有相同的功能也有不同的功能的时候,应该采用多个接口类来进行分别的约束。
编程语言分为:
1.强类型语言——Java c++ c# 必须在相同数据类型之间做运算。
2.弱类型语言——shell语言 不同数据类型之间可以运算 如:1+'1'。
3.结余强类型和弱类型之间的语言——python,动态强类型语言,相同数据类型之间做运算。
多态:
由于java语言必须做相同数据类型之间的运算,只能通过继承父类将多个数据类型作为参数传入
java中在一个类(父类)之下发展出来的多个类的对象都可以作为参数传入一个函数或者方法。
python 天生自带多态效果(继承object类)。
class Payment:pass  #定义一个父类,下面的多个类都继承父类,数据类型继承父类的传入。

class QQpay(Payment):
def pay(self,money):
print('使用qq支付了%s元' % money)
class Wechatpay(Payment):
def pay(self,money):
print('使用微信支付了%s元' % money)
def recharge(self):pass def pay(Payment pay_obj,int money):
pay_obj.pay(money) qq_obj = QQpay()
qq_obj.pay(100)
pay(qq_obj,100)

鸭子类型

python崇尚鸭子类型,即看起来像,叫起来像,走起路来像鸭子,那么它就是鸭子。不通过具体的继承关系来约束这些类中必须有哪些方法名,是通过一种约定成俗的概念来保证在多个类中相似的功能叫相同的名字。

class QQpay():
def pay(self,money): #看起来相同都叫pay
print('使用qq支付了%s元' % money)
class Wechatpay():
def pay(self,money):
print('使用微信支付了%s元' % money) def pay(pay_obj,money):
pay_obj.pay(money) qq_obj = QQpay()
qq_obj.pay(100)
pay(qq_obj,100)
 

面向对象—多态、鸭子类型(Day21)的更多相关文章

  1. 组合+封装+property+多态+鸭子类型(day21)

    目录 昨日回顾 继承 什么是继承 继承的目的 什么是抽象 继承背景下,对象属性的查找顺序 派生 什么是派生 子类派生出新的属性,重用父类的属性 新式类和经典类 钻石继承的继承顺序 今日内容 一.组合 ...

  2. day 28 面向对象 三种特性之一 多态 鸭子类型 反射(反省)

    多态是OOP的三大特征之一 字面意思:多种形态 多种状态 官方描述:不同的对象可以响应(调用)同一个方法 产生不同的结果(例如水的三相特征) 多态不是什么新技术 我们编写面向对象的程序时 其实就有多态 ...

  3. python 全栈开发,Day21(抽象类,接口类,多态,鸭子类型)

    一.昨日复习 派生方法和派生属性 super 只有在子父类拥有同名方法的时候, 想使用子类的对象调用父类的方法时,才使用super super在类内 : super().方法名(arg1,..) 指名 ...

  4. python之类的多态(鸭子类型 )、封装和内置函数property

    一.多态 1.什么是多态:一个类表现出的多种状态--->通过继承来实现的例如:class Animal:passclass Dog(Animal):passclass Cat(Animal):p ...

  5. 多态 鸭子类型 反射 内置方法(__str__,__del__) 异常处理

    ''' 1什么是多态 多态指的是同一种/类事物的不同形态 2 为何要有多态 多态性:在多态的背景下,可以在不用考虑对象具体类型的前提下而直接使用对象 多态性的精髓:统一 多态性的好处: 1增加了程序的 ...

  6. Python面向对象之鸭子类型

    python没有多态?他有什么? 他有鸭子类型. 鸭子类型 : 看着像鸭子,他就是鸭子. 比如一些类,他们中有一些方法,有着相同的功能, 这时为我们将这些相同功能的名字命名为一样的. 那么这些类 都互 ...

  7. PythonI/O进阶学习笔记_3.1面向对象编程_python的多态和鸭子类型

    前言: 与第一篇的面向对象内容不同的是,第一篇中的面向对象更多的是与类.对象结合起来的概念粗浅理解,就是在编程历史中诞生的一种思想方法. 这篇的面向对象编程,更多落实到在语言设计实现中,是如何体现面向 ...

  8. Python面向对象04 /封装、多态、鸭子类型、类的约束、super

    Python面向对象04 /封装.多态.鸭子类型.类的约束.super 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的 ...

  9. python 面向对象专题(四):封装、多态、鸭子类型、类的约束、super

    https://www.cnblogs.com/liubing8/p/11321099.html 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 ...

随机推荐

  1. SparkSQL学习笔记

    概述 冠状病毒来临,宅在家中给国家做贡献之际,写一篇随笔记录SparkSQL的学习笔记,目的有二,一是记录整理之前的知识作为备忘录,二是分享技术,大家共同进步,有问题也希望大家不吝赐教.总体而言,大数 ...

  2. 【Java】简单了解网络编程

    文章目录 网络编程 网络编程中有两个主要的问题 网络编程中的两个要素 通信要素一:IP和端口号 实例化InetAddress 两个常用方法 端口号 通信要素二:网络通信协议 实现TCP的网络编程 例子 ...

  3. web刷题记录 极客大挑战2019Knife upload buy a flag

    极客2019Knife webshell就是以asp.php.jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理.服务器管理.权限管理等操作.使用方法简单,只需上传一个代码文件,通 ...

  4. C# 文件对话框例子

    OpenFileDialog控件的基本属性InitialDirectory:对话框的初始目录 Filter: 获取或设置当前文件名筛选器字符串,例如,"文本文件(*.txt)|*.txt|所 ...

  5. [Windows]为windows系统鼠标右键添加软件和图标

    转载自 https://blog.csdn.net/p312011150/article/details/81207059 一.打开注册表 首先打开windows的注册表,当然了,我个人倾向于 (1) ...

  6. 利用词向量进行推理(Reasoning with word vectors)

    The amazing power of word vectors | the morning paper (acolyer.org) What is a word vector? At one le ...

  7. Lesson8——Pandas reindex重置索引

    pandas目录 1 简介 重置索引(reindex)可以更改原 DataFrame 的行标签或列标签,并使更改后的行.列标签与 DataFrame 中的数据逐一匹配.通过重置索引操作,您可以完成对现 ...

  8. TensorFlow 2.0 快速入门指南 | iBooker·ApacheCN

    原文:TensorFlow 2.0 Quick Start Guide 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活 ...

  9. NumPy 数组学习手册·翻译完成

    原文:Learning NumPy Array 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交流群 ...

  10. 安装JDK,以及配置环境变量

    卸载JDK 删除Java的安装目录 删除JAVA_HOME 删除path下关于Java的目录 Java-version 安装JDK 使用浏览器搜索JDK,找到下载地址 同意协议 下载电脑对应的版本 双 ...