python 接口类和抽象类

为什么讲封装之前要将这个东西? 我才不会说为什么

首先:

  python没有接口类这个概念!!!!!!!!

哈哈哈......神经病

python抽象类和接口类更接近于一种规范,例如,我吃苹果,吃香蕉,吃梨,这些我都可以统一归到吃水果这个类中,但是我能吃到这个水果吗?????  水果这个笼统的东西我能吃到吗,我只能吃到具体的香蕉什么的.........

这个规范不止一个,可以制定多个! 应该能明白这个意思吧.......

from abc import ABCMeta,abstractmethod

class Payment(mteaclass = ABCMeta):
@abstractmethod
def pay(self): pass
# @abstractmethod
# def func(self): pass class Alipay(Payment):
def __init__(self,money):
self.money = money def pay(self):
print('使用了支付宝支付了%s元'%self.money) class Jdpay(Payment):
def __init__(self,money):
self.money = money def pay(self):
print('使用了京东支付了%s元' % self.money) class Wechatpay(Payment):
def __init__(self,money):
self.money = money def pay(self):
print('使用了微信支付了%s元' % self.money) def pay(obj):
obj.pay() print(''' w1 = Wechatpay(200)
a1 = Alipay(100)
pay(a1)
pay(w1) ''')
 
   

这就是规范化,统一化设计

这个格式是固定的

在下面统一一个接口

这样的一段代码就实现了对程序的归一化设计,不按照格式来编写程序就会报错

封装

广义的封装: 实例化 一个对象,对象空间封装一些属性

狭义的封装: 私有制

对于私有静态字段,类的外部不能访问

类名不能访问私有静态字段

对于私有静态字段来说,只能在本类内部访问,类的外部,派生类均不可访问(其实可以访问,只不过访问的方式算是python的一个bug)

私有成员: 私有惊天字段, 私有方法,私有对象属性

class B:
__money = 1000 # 私有静态字段 class A(B):
name = 'alex'
__age = 20 # 私有静态字段 def func(self):
print(self.__age)
print(A.__age) # 对于私有静态字段,类的内部可以访问
print('func...')
def func1(self):
print(self.__money)
print(A.__money) a1 = A()
print(a1.name)
print(A.name) print(''' print(a1.__age) # 实例化对象不能访问私有静态字段
print(A.__age) # 类名不能访问私有静态字段
# 对于私有静态字段,类的外部不能访问
a1.func() # 有一个方法可以访问,但是这是python的一个bug print(A._A__age)
''')

多态

python处处是多态!!!!!!!!!!

python中没有多态的概念!!!!!!!!!

.......扑哧........

(你放佛在刻意逗我笑)

嘛,这两句话都没有毛病,python确实没有多态的概念,它有的就是鸭子类型

什么叫鸭子类型? 

鸭子类型: 看着像鸭子,他就是鸭子

# python中没有多态. 但是他有鸭子类型
# 鸭子类型,: 看着像鸭子, 那么他就是鸭子
# 互看为鸭子类型的数据都有:
class Str:
def index(self):
pass class List:
def index(self):
pass class Tuple:
def index(self):
pass print('''
这些类,都互称鸭子类型
其中方法名可以自由更改,任意变换,但是一般不要这样做
''')

python面向对象-封装and多态的更多相关文章

  1. python面向对象(封装,继承,多态)

    python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...

  2. python面向对象(封装、多态、反射)

    目录 面向对象之封装 @property 面向对象之多态 面向对象之反射 面向对象之封装 含义 将类中的某些名字按照特殊的书写方式"隐藏"起来,不让外界直接调用,目的是为了不然外界 ...

  3. Python面向对象三要素-多态

    Python面向对象3要素-多态 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.多态概述 OCP原则:多用“继承”,少修改. 继承的用途:在子类上实现对基类的增强,实现多态. ...

  4. php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

    1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...

  5. python面向对象封装案例(附:is和==的区别)

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对 ...

  6. Java基础——面向对象(封装——继承——多态 )

    对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...

  7. python 24 封装、多态

    目录 1. 封装.多态 2. 鸭子类型--Duck typing 3. 类的约束 5. super深度剖析 1. 封装.多态 封装:将代码.数据放入一个容器空间中,并且可以使用. 多态:一个事物可以呈 ...

  8. python面向对象-封装-property-接口-抽象-鸭子类型-03

    封装 什么是封装: # 将复杂的丑陋的隐私的细节隐藏到内部,对外提供简单的使用接口 或 # 对外隐藏内部实现细节,并提供访问的接口 为什么需要封装 1.为了保证关键数据的安全性 2.对外部隐藏内部的实 ...

  9. python面向对象之继承/多态/封装

    老师说,按继承/多态/封装这个顺序来讲. 子类使用父类的方法: #!/usr/bin/env python # coding:utf-8 class Vehicle: def __init__(sel ...

随机推荐

  1. Java 国际化

    国际化英文单词为:Internationalization,又称I18N,I为因为单词的第一个字母,18为这个单词的长度,而N代表这个单词的最后一个字母.国际化又称本地化(Localization,L ...

  2. 前端JS校验银行卡卡号和身份证号码(附ES6版方法)

    1.银行卡卡号校验方法. function luhnCheck(bankno) { var lastNum = bankno.substr(bankno.length - 1, 1); //取出最后一 ...

  3. BG.Hive - part2

    1. 将mysql的订单数据导入hive的分区表(桶.倾斜)[partition,bucket,skew] a> 在Hive中新建分区表 CREATE TABLE IF NOT EXISTS H ...

  4. IDEA 导出maven项目所有的依赖包到指定的目录

    问题产生: 需要把一个maven工程调整结构,部署到一个新环境中,需要把依赖的jar包,单独打到一个目录中. 解决方案: 需要两步便可以copy到指定的目录中. 第一步: 找到maven projec ...

  5. O(∩_∩)O~~

    1.在一切ac的路上,所以的难题都是纸老虎. 2.加油吧,少年.

  6. spring-boot-starter-actuator不起作用

    spring-boot-starter-actuator的作用,actuator是监控系统健康情况的工具.使用这个功能首先要先添加依赖,如下.<!-- 监控和管理生产环境--><de ...

  7. 解决移动端touch事件(touchstart/touchend) 的穿透问题

    情景: 我们在移动端点击事件click对比touchend会有很明显的300ms的延迟,为啥? 浏览器在 click 后会等待约300ms去判断用户是否有双击行为(手机需要知道你是不是想双击放大网页内 ...

  8. 为什么不要使用 select * from xxx (oracle 亲测)

    打开已用时间set timing on;create table users(id number(20), name varchar2(20), password varchar2(20));inse ...

  9. statistics_level 参数的应用

    转自 http://blog.csdn.net/zengmuansha/article/details/5149398 statistics_level 参数是oracle9.2开始引入的一个控制系统 ...

  10. 使用Axure设计中,大型的后台系统原型总结

    使用Axure设计中,大型的后台系统原型总结 2018年4月16日luodonggan 在产品原型设计中,经常会涉及到后台系统原型的设计,如何设计出更规范标准的后台系统原型,是很多产品同行们都会遇到的 ...