ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-day25_接口类_封装

2019-02-08 09:00:37  阅读:310  来源: 互联网

标签:python pay self day25 money print 接口类 class def


1,接口类,规范子类的调用接口

# java : 面向对象编程
# 设计模式 —— 接口
# 接口类 : python原生不支持
# 抽象类 : python原生支持的


from abc import abstractmethod,ABCMeta
class Payment(metaclass=ABCMeta):    # 元类 默认的元类是type
  @abstractmethod
  def pay(self,money):pass    # 没有具体代码实现这个方法
# 规范 :接口类或者抽象类都可以
# 接口类 支持多继承,接口类中的所有的方法都必须不能实现 —— java
# 抽象类 不支持多继承,抽象类中方法可以有一些代码的实现 —— java


class 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()

pay(wechat,100)

 

2,

# tiger 走路 游泳
# swan 走路 游泳 飞
# oldying 走路 飞
from abc import abstractmethod,ABCMeta
class 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):
    pass
class OldYing(Fly_Animal,Walk_Animal):pass
class Swan(Swim_Animal,Walk_Animal,Fly_Animal):pass

# 接口类 刚好满足接口隔离原则----一个父类,只完成子类必需有的功能。面向对象开发的思想、规范

 

3,抽象类 ----单继承

#一切皆文件
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代码

 

4,多态 python 天生支持多态

# def func(int num,str name):    # python在传参时,不需要指定参数的数据类型,即多态
#    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当中的应用点并不是非常必要

 

5,封装

# 广义上面向对象的封装 :代码的保护,面向对象的思想本身就是一种
# 只让自己的对象能调用自己类中的方法

# 狭义上的封装 —— 面向对象的三大特性之一
# 属性 和 方法都藏起来 不让你看见
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())

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

 

标签:python,pay,self,day25,money,print,接口类,class,def
来源: https://www.cnblogs.com/yygy/p/10309333.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有