初识面向对象-接口类、抽象类、封装

接口类
# java : 面向对象编程# 设计模式   —— 接口# 接口类 : python原生不支持# 抽象类 : python原生支持的from abc import abstractmethod,ABCMetaclass Payment(metaclass=ABCMeta):  # 元类 默认的元类 type    @abstractmethod    def pay(self,money):pass   # 没有实现这个方法# 规范 :接口类或者抽象类都可以# 接口类 支持多继承,接口类中的所有的方法都必须不能实现 —— java# 抽象类 不支持多继承,抽象类中方法可以有一些代码的实现 —— javaclass Wechat(Payment):    def pay(self,money):        print(‘已经用微信支付了%s元‘%money)

class Alipay(Payment):    def pay(self,money):        print(‘已经用支付宝支付了%s元‘ % money)

class Applepay(Payment):    def pay(self,money):        print(‘已经用applepay支付了%s元‘ % money)

def pay(pay_obj,money):  # 统一支付入口    pay_obj.pay(money)

# wechat = Wechat()# ali = Alipay()app = Applepay()# wechat.pay(100)# ali.pay(200)p = Payment()

接口类的多继承
# tiger 走路 游泳# swan 走路 游泳 飞# oldying 走路 飞from abc import abstractmethod,ABCMetaclass Swim_Animal(metaclass=ABCMeta):    @abstractmethod    def swim(self):pass

class Walk_Animal(metaclass=ABCMeta):    @abstractmethod    def walk(self):pass

class Fly_Animal(metaclass=ABCMeta):    @abstractmethod    def fly(self):pass

class Tiger(Walk_Animal,Swim_Animal):    def walk(self):        pass    def swim(self):        passclass OldYing(Fly_Animal,Walk_Animal):passclass Swan(Swim_Animal,Walk_Animal,Fly_Animal):pass

# 接口类  刚好满足接口隔离原则 面向对象开发的思想 规范
抽象类
#一切皆文件import abc #利用abc模块实现抽象类

class All_file(metaclass=abc.ABCMeta):    all_type=‘file‘    @abc.abstractmethod #定义抽象方法,无需实现功能    def read(self):        ‘子类必须定义读功能‘        with open(‘filaname‘) as f:            pass

    @abc.abstractmethod #定义抽象方法,无需实现功能    def write(self):        ‘子类必须定义写功能‘        pass

class Txt(All_file): #子类继承抽象类,但是必须定义read和write方法    def read(self):        print(‘文本数据的读取方法‘)    def write(self):        print(‘文本数据的读取方法‘)

class Sata(All_file): #子类继承抽象类,但是必须定义read和write方法    def read(self):        print(‘硬盘数据的读取方法‘)

    def write(self):        print(‘硬盘数据的读取方法‘)

class Process(All_file): #子类继承抽象类,但是必须定义read和write方法    def read(self):        print(‘进程数据的读取方法‘)

    def write(self):        print(‘进程数据的读取方法‘)

wenbenwenjian=Txt()

yingpanwenjian=Sata()

jinchengwenjian=Process()

#这样大家都是被归一化了,也就是一切皆文件的思想wenbenwenjian.read()yingpanwenjian.write()jinchengwenjian.read()

print(wenbenwenjian.all_type)print(yingpanwenjian.all_type)print(jinchengwenjian.all_type)

# 抽象类 : 规范# 一般情况下 单继承 能实现的功能都是一样的,所以在父类中可以有一些简单的基础实现# 多继承的情况 由于功能比较复杂,所以不容易抽象出相同的功能的具体实现写在父类中

# 抽象类还是接口类 : 面向对象的开发规范 所有的接口类和抽象类都不能实例化# java :# java里的所有类的继承都是单继承,所以抽象类完美的解决了单继承需求中的规范问题# 但对于多继承的需求,由于java本身语法的不支持,所以创建了接口Interface这个概念来解决多继承的规范问题

# python# python中没有接口类  :  #  python中自带多继承 所以我们直接用class来实现了接口类# python中支持抽象类  : 一般情况下 单继承  不能实例化  #  且可以实现python代码
多态
# 多态 python 天生支持多态# def func(int num,str name):#     pass## func(‘alex‘,2)# class Payment:pass

# class Alipay():#     def pay(self,money):#         print(‘已经用支付宝支付了%s元‘ % money)## class Applepay():#     def pay(self,money):#         print(‘已经用applepay支付了%s元‘ % money)## def pay(pay_obj,money):  # 统一支付入口  归一化设计#     pay_obj.pay(money)## pay()

# 什么是多态# python 动态强类型的语言# 鸭子类型# list tuple# 不崇尚根据继承所得来的相似# 我只是自己实现我自己的代码就可以了。# 如果两个类刚好相似,并不产生父类的子类的兄弟关系,而是鸭子类型# list tuple 这种相似,是自己写代码的时候约束的,而不是通过父类约束的# 优点 : 松耦合 每个相似的类之间都没有影响# 缺点 : 太随意了,只能靠自觉

# class List():#     def __len__(self):pass# class Tuple():#     def __len__(self):pass## def len(obj):#     return obj.__len__()## l = Tuple()# len(l)## # 强类型语言     多态# # python 语言    鸭子类型

# 接口类和抽象类 在python当中的应用点并不是非常必要
封装
# 广义上面向对象的封装 :代码的保护,面向对象的思想本身就是一种# 只让自己的对象能调用自己类中的方法

# 狭义上的封装 —— 面向对象的三大特性之一# 属性 和 方法都藏起来 不让你看见class Person:    __key = 123  # 私有静态属性    def __init__(self,name,passwd):        self.name = name        self.__passwd = passwd   # 私有属性

    def __get_pwd(self):         # 私有方法        return self.__passwd   #只要在类的内部使用私有属性,就会自动的带上_类名

    def login(self):          # 正常的方法调用私有的方法        self.__get_pwd()

alex = Person(‘alex‘,‘alex3714‘)print(alex._Person__passwd)   # _类名__属性名print(alex.get_pwd())

# 所有的私有 都是在变量的左边加上双下划綫    # 对象的私有属性    # 类中的私有方法    # 类中的静态私有属性# 所有的私有的 都不能在类的外部使用

# 昨天的复习和博客# 今天的作业、复习# 预习封装的内容


原文地址:https://www.cnblogs.com/mys6/p/10651246.html

时间: 2024-12-23 03:33:39

初识面向对象-接口类、抽象类、封装的相关文章

Python_015(面向对象(接口类,抽象类,多态,封装)

一.抽象类与接口类 1.抽象类:抽象即类似或者说比较像的部分,继承描述的是父类与子类的一种关系,要找出这种关系,必须先抽象再继承; a:抽象分成两个层次: 1)由对象->类:将两个有相似地方的对象抽取成类; 2)由类->父类:将两个有相似地方的类抽取成父类; :抽象最主要的作用就是划分类别(可以隔离关注点,降低复杂度) 2.为什么要有抽象类 与Java一样,Python也有抽象类的概念,需要借助模块实现,它是一个特殊的类,特殊之处在于只能被继承,不能被实例化; 类是从一些对象中抽取相同的内容而

python开发面向对象基础:接口类&抽象类&多态&多继承

一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 开发中容易出现的问题 1 class Alipay: 2 ''' 3 支付宝支付 4 ''' 5 def pay(self,money): 6 print('支付宝支付了%s元'%money) 7 8 class Applepay: 9 ''' 1

python 2018.7.25 接口类,抽象类

python 没有接口这个概念 接口类,抽象类: 制定一个规范. from abc import ABCMeta,abstractmethodclass Payment(metaclass=ABCMeta): # 抽象类(接口类): @abstractmethod def pay(self): pass # 制定了一个规范 class Alipay(Payment): def __init__(self,money): self.money = money def pay(self): prin

接口类抽象类

接口类(抽象类): 在python中是没有接口类,可以把接口类和抽象类视为同一种定义:制定一个规范举例:收到项目经理的要求,写一个支付: #第一版 class Alipay: def __init__(self,money): self.money = money def pay(self): print('zfb支付了%s' % self.money) class Jd: def __init__(self, money): self.money = money def pay(self):

Java面向对象----->接口和抽象类

抽象类和接口(一)在实际的项目中,整个项目的代码一般可以分为结构代码和逻辑的代码.就像建造房屋时,需要首先搭建整个房屋的结构,然后再细化房屋相关的其它的结构,也像制造汽车时,需要首先制作汽车的框架,然后才是安装配件以及美化等工作.程序项目的实现也遵循同样的道理.在项目设计时,一个基本的原则就是--"设计和实现相分离".也就是说结构代码和逻辑代码的分离,就像设计汽车时只需要关注汽车的相关参数,而不必过于关心如何实现这些要求的制作.程序设计时也是首先设计项目的结构,而不用过多的关系每个逻辑

php中普通类 接口类 抽象类 浅谈

一.普通类 1.关键词:class  类名,继承关键字extends 2.继承:只能实现单继承, 3.多态:子类继承可以实现多种功能 4.封装:类有权限机制,私有的只能自己用,受保护的可以被继承,子类的权限必须大于等于父类 5.实例化:可以被实例化 二.接口类 1.关键词 :interface  类名   ,继承关键字 implements 2.继承:可以实现多继承,父类有的方法属性,子类必须有,类可以实现多个接口,用逗号来分隔多个接口的名称 3.多态:同样具有多态性 4.封装:所有的方法,属性

JS面向对象 关于类的封装、继承、多态

一.封装:把实现一个功能的代码放在一个函数中封装起来,以后再想实现这个功能的时候,我们不需要重新的编写代码了,只需要执行对应的函数即可,我们把这种机制就称之为"函数的封装" -->低耦合高内聚:减少页面中的冗余代码,提高代码的重复使用率 二.多态 后台语言[java.C#.ASP.net.php...]中的多态:重载.重写重载(Reload):多个方法,方法名相同,参数的个数或者参数的类型不一样重写(Rewrite):子类重写父类的方法 JS严格意义上不存在重载,后面的方法会把前

初识面向对象:类

定义一个类: class 类名(大写开头): 属性 = ‘a’ 类名.属性 类名的作用:操作属性.查看属性 例: class Tst: nationality = '中国' #静态属性,不能在类外边修改 def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex print(id(self))#self与t1的内存地址一样 def way(self):#方法,一般情况下必须传self参数,且必须写

python3 面向对象编程--类的封装和继承

#python3import refrom urllib import requestimport os class PosterSpider(object):     def __init__(self, path='./'):           self.path = path #the entry of this process def getStart(self, url):           page = self.reqPage(url) page = page.decode('