Python 面向对象特性二 多态(3-7)

接口类:

继承有两种用途:

一:继承基类的方法,并且做出自己的改变或者扩展(代码重用)

二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能

在Python中是没有接口的概念的(接口是在Java里的)

from abc import ABCMeta,abstractmethod#调用abc模块中的抽象方法
# 接口类 : 接口类就是一个规范 接口类一般是项目设计人员写好的
class Payment(metaclass=ABCMeta):   #规范
    @abstractmethod
    def pay(self,money):
        ‘‘‘
        :param money:
        :return:
        ‘‘‘
        raise NotImplementedError

class ApplePay(Payment):# 100
    def pay(self,money):pass
app = ApplePay()
# 微信支付
# class WeChatPay(Payment):
#     def pay(self,money):
#         print(‘通过微信支付了%s元钱‘%(money))

# 支付宝支付
# class AliPay(Payment):
#     def pay(self,money):
#         print(‘通过支付宝支付了%s元钱‘%(money))

# apple pay
# class ApplePay(Payment): pass
    # def pay(self,money):
    #     print(‘通过支付宝支付了%s元钱‘ % (money))

# wp = WeChatPay()
# alp = AliPay()
# app = ApplePay()
# def pay(pay_obj,money): # 程序的归一化设计
#     pay_obj.pay(money)
# pay(alp,100)
# pay(wp,100)
# pay(app,100)

在Java里

接口类是一种规范,从上述代码可知,没一种支付方式都是一个类,每个类中定义一种支付方法完成功能,由于每个支付方法在程序中表现出来的就是支付类的对象,我们要拿到每一个支付方法,位了方便支付方法的调用,都需要统一一个入口。pay函数。因为在Python中没有节后类这种数据类型,没有接口类专门的语法,这时候我们可以继承abc模块实现接口的功能。

接口类开发原则

需要注意的是:接口类不能被实例化!

抽象类:

定义: 规范一个类的类  与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化

与接口类的区别:

在Python中,抽象类和接口类没有区别在java里 有区别:java的接口类规定 类里面的方法一定不能实现(一句代码也不能写)抽象类 是单继承
无论接口类 还是抽象类 其实都是一种面向对象编程的开发规范只是在接口类或者抽象类中 去约束继承它的子类必须实现某些方法对于java代码来说:如果发生多继承 那么一定是接口类 且里面的方法都不能实现                #  如果在方法里有了实现 那么一定是单继承 的抽象类# 但是对于python来说 就没有这些约束    # 因为python没有接口的概念    # 对于类的继承 没有多继承的限制# 实际上abc模块是帮我们实现抽象类的方法,只是我们用它来模仿接口类的效果了

在python中,只要metaclass = ABCMeta 定义了抽象方法(@abctractmethod)    # 这个类就不能被实例化    # 你可以说他是一个抽象类

from abc import ABCMeta, abstractmethod
class File(metaclass=ABCMeta):
    @abstractmethod
    def read(self):
        f = open(‘file‘, ‘r‘)
        self.f = f

    @abstractmethod
    def write(self):
        f = open(‘file‘, ‘w‘)

class Word(File):
    def read(self):
        # 打开一个文件
        # 读文件
        # 关闭一个文件
        super().read()
        self.f.read()
        self.f.close()

class Excle(File):
    def read(self):
        # 打开一个文件
        # 读某一列  读某一列
        # 关闭一个文件
        super().read()
        self.f.readline()
        self.f.close()
class PPT(File):
    def read(self):
        # 打开一个文件
        # 读文字 读表格 读图片
        # 关闭一个文件
        super().read()
        self.f.readpicture()
        self.f.close()

抽象类

多态:所有的类都继承父类

Python是自带多态的(也可以理解为Python都是继承了object这个父类)Python是一门动态强类型语言

# class WeChatPay:
#     def pay(self,money):
#         print(‘通过微信支付了%s元钱‘%(money))
# class AliPay:
#     def pay(self,money):
#         print(‘通过支付宝支付了%s元钱‘%(money))
# def pay(pay_obj,money): # 程序的归一化设计
#     pay_obj.pay(money)
# w = WeChatPay()
# a = AliPay()
# pay(w,100)

多态

鸭子类型:将大致相同的属性归为一个父类,供子类调用

Java崇尚接口类,Python崇尚鸭子类型



原文地址:https://www.cnblogs.com/yimiflh/p/8528429.html

时间: 2024-08-04 13:26:46

Python 面向对象特性二 多态(3-7)的相关文章

Python面向对象特性 - 多态

Python中的多态 多态 多态指的是一类事物有多种形态.多态的实现需要依赖于继承~ import abc class File(metaclass=abc.ABCMeta): @abc.abstractmethod def read(self): pass @abc.abstractmethod def write(self): pass class Txt(File): # 文本数据的读写 def read(self): print('读取文本数据') def write(self): pr

oldboy 21th day. I love Python. 面向对象之封装, 多态, 继承 三大特性

一, 主要内容: 接口类:( 只是在工作中, 书写的一种规范.) 抽象类: 用处: 在工作中, 如果你要是规定几个类, 必须有一样的方法, 你要是抽象类. 封装: 1, 将一些属性或者方法 (一些有用的信息) 放置在一个空间中. 2, 私有成员的封装:私有静态变量, 私有属性, 私有方法 特点: 在变量前+__双下划线, 并且在类外面,子类访问私有变量,私有方法 是访问不到的. 因为私有成员,在运行时, 都会变成: _类名__变量名 所以你在类的外部,或者派生类中都不可访问. 有些方法, 变量,

Python 面向对象(二)

面向对象的三大特性1 继承2 封装3 多态 绑定方法与非绑定方法 异常处理 上次复习:定义类的时候 建议首字母大写名称空间以字典形式显示__init__ 这个函数不能有返回值内部可以有一些其他逻辑,比如判断举例: 绑定方法在调用的时候 谁调用绑定方法就会把谁传进去 1 继承2 封装3 多态 继承 封装 多态 会体现面向对象的可扩展性 1 继承 什么是继承 是一种新建类的方式,新建的类是子类,子类会遗传父类的属性 作用:减少代码的冗余 在Python当中,子类可以继承1个或多个父类 python支

Python面向对象特性 - 继承

面向对象有3大特性:继承.多态.封装,本章介绍 Python中的 继承 特性~? 什么是继承 继承是创建类的一种方式,在 Python中支持多继承,即在创建类的时候可以继承一个或者多个父类.在继承关系中,被继承的类通常称为父类(或超类,基类),新建的类则称为子类(或派生类).?继承的优势在于可以有效地重用代码,提高代码的可读性~?继承示例: class Fu_1: # 父类 pass class Fu_2: # 父类 pass class Zi_1(Fu_1): # 单继承 pass class

Python面向对象特性 - 封装

类中的私有属性 私有属性包括私有变量和私有方法,在 Python 中,在变量名或者方法名前面加上双下划线,这个属性就成为了类的私有属性.? class Person: def __init__(self, name, age): self.__name = name self.__age = age def __fun(self): print(self.__class__) def say(self): self.__fun() # 自动转换为 调用 _Person__fun 方法 print

Java 面向对象特性与多态面试题

java 基础核心问题汇总:https://mp.weixin.qq.com/s/yKCUlvaL9GwgpvSjBtvihQ https://mp.weixin.qq.com/s?__biz=MzI3ODc3NzQ4NQ==&mid=2247483745&idx=1&sn=4e9f6b78bb1419fd1f8aca5022986f1e&chksm=eb509a83dc27139593eeed2f840e5d849b2e9f5e00848e72ac409e1f144895

python 面向对象——继承与多态

Python是面向对象的编程语言,面向对象的基本单元是类 类的声明: 1 class class_name(): 2 pass 测试如下: In [1]: class c(): ...: pass ...: In [2]: a=c() In [3]: a Out[3]: <__main__.c instance at 0x07500A30> 类的继承: 1 In [4]: class base(): 2 ...: def f(self): 3 ...: print 'base' 4 ...:

Python 面向对象进阶(二)

1. 垃圾回收 小整数对象池 Python对小整数的定义是 [-5, 257),这些整数对象是提前建立好的; 在一个Python程序中,所有位于这个范围内的整数,使用的都是同一个对象; 单个字符共用对象,常驻内存; 大整数对象池 每一个大整数,均创建一个新的对象; intern机制 单个单词,不可修改,默认开启intern机制,共用对象,当引用计数为0时,则销毁; 字符串(含有空格),不可修改,没有开启intern机制,不共用对象; # 示例: a1 = "Helloworld" a2

Python学习:15.Python面向对象(二、继承的各种情况)

一.什么是继承 继承是一种创建类的方法,在python中,一个类可以继承来自一个或多个父.原始类称为基类或超类. #创建父类 class Parent1: pass class Parent2: pass # 继承父类,单继承 class Obj1(Parent1): pass #继承父类,多继承 class Obj2(Parent1,Parent2): pass 二.什么时候使用继承 在已经创建的几个类中,这几哥类中的方法和变量有相同的,这种时候我们就可以使用类的继承,将其它类中已有的方法和变