【学习笔记】--- 老男孩学Python,day18 面向对象------抽象类(接口类), 多态, 封装
抽象类,接口类
Python没有接口这个概念
抽象类(接口类): 目的是制定一个规范
要学会归一化设计,有重复的东西就要想把它们合并起来
from abc import ABCMeta, abstractclassmethod class Payment(metaclass=ABCMeta): # 创建一个抽象 (接口) 类 的父类, @abstractclassmethod def pay(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) # 都有pay这个方法 就建一个pay的函数 def pay(obj): obj.pay() # 实例化一个Alipay的对象 a1 = Alipay(2000) # 实例化一个Jdpay的对象 j1 = Jdpay(1999) # 实例化一个Wechatpay的对象 w1 = WeChatpay(1) pay(a1) pay(j1) pay(w1)
多态( python没有多态 有鸭子类型. ): 鸭子类型 : 看着像鸭子,他就是鸭子.
python是 弱类型语言
name = 'alex'
python 不管什么类型,传入函数,封装到对象中都可以.
这些类 都互称为鸭子.都有index方法
class Str: def index(self): pass class List: def abc(self): pass class Tuple: def rrr(self): pass
封装
广义的封装: 实例化一个对象,给对象空间封装一些属性.
狭义的封装: 私有制.
私有成员: __私有静态字段(变量), __私有方法, __私有对象属性
self.__ XXX 才可以访问
类的内部可以访问
# 类外部不能访问 # 类的内部可以访问 # 类的派生类也不能访问
私有静态字段(变量)
私有静态字段:仅类内部可以访问;
class B: __money = 100000 class A(B): name = 'alex' __age = 1000 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(a1.__age) # 实例化对象不能访问私有静态字段 print(A.__age) # 类名不能访问私有静态字段 # 对于私有静态字段,类的外部不能访问. a1.func() # 对于私有静态字段,类的内部可以访问. a1.func1() # 对于私有静态字段来说,只能在本类中内部访问,类的外部,派生类均不可访问. # 可以访问,但是工作中千万不要用. print(A._A__age) print(A.__dict__)
私有方法
私有方法:仅类内部可以访问
class B: __money = 100000 def __f1(self): print('B') class A(B): name = 'alex' def __func(self): print('func....') def func1(self): # self.__func() # 类的内部可以访问 self.__f1() a1 = A() a1.__func() # 类外部不能访问 a1.func1() # 类的内部可以访问 a1.func1() # 类的派生类也不能访问.
私有对象属性
class Bmi: def __init__(self,name, weight, heigth): self.name = name self.__weight = weight self.heigth = heigth def bmi(self): b = self.__weight / (self.__weight**2) return self.__weight p1 = Bmi('张三',89,1.77) print(p1.bmi())
面试题
class Parent: def __func(self): # ③ print('in 父类 func') def __init__(self): # ② self.__func() class Son(Parent): def __func(self): print('in 子类 func') son1 = Son() # ① ''' 1.实例化一个son的对象 2.找__init__()方法 子类里面没有,找父类,父类中有__init__()方法 3.类外部不能访问 类的内部可以访问 类的派生类也不能访问 '''
面向对象结构与成员
'''''' ''' class A: name = '静态字段' # ======> 第一部分 静态字段 部分 def __init__(self): pass # ======> 第二部分 方法部分 def func(self): pass ''' class A: company_name = 'old_boy_educaion' # 静态变量 __iphone = '138xxxxxxxxx' # 私有静态变量(私有静态字段) def __init__(self,name,age): # 普通方法(构造方法) self.name = name # 对象属性(普通字段) self.age = age # 私有对象属性(私有普通字段) def func1(self): # 普通方法 pass def __func(self): # 私有方法 pass @classmethod # 类方法 def class_func(cls): # 定义静态方法,无默认参数 print('静态方法') @staticmethod # 静态方法 def static_func(): # 定义静态方法,无默认参数 @property # 属性 def prop(self): pass
【学习笔记】--- 老男孩学Python,day18 面向对象------抽象类(接口类), 多态, 封装的更多相关文章
- python面向对象 : 抽象类(接口类),多态,封装(私有制封装)
一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...
- python day - 19 抽象类 接口类 多态 封装
一. 抽象类接口类即制定一个规范 特点: 1.不可被实例化. 2.规范子类当中必须事先某个方法. 3.在python中有原生实现抽象类的方法,但没有原生实现接口类的方法. 例题:制定一个规范就是,子类 ...
- python 全栈开发,Day21(抽象类,接口类,多态,鸭子类型)
一.昨日复习 派生方法和派生属性 super 只有在子父类拥有同名方法的时候, 想使用子类的对象调用父类的方法时,才使用super super在类内 : super().方法名(arg1,..) 指名 ...
- Java学习笔记(六):面向对象、接口和抽象类
类和对象 Java是一门面向对象的语言,下面我们来了解一下Java中的面向对象. 方法和重载 Java中的方法格式如下: 访问修饰符 返回值类型 方法名(参数){ 方法主体 } Java的方法支持重载 ...
- python学习笔记(十九)面向对象编程,类
一.面向对象编程 面向对象,是一种程序设计思想. 编程范式:编程范式就是你按照什么方式去编程,去实现一个功能.不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路,两种最重要的编程范式分 ...
- Flutter学习笔记(8)--Dart面向对象
如需转载,请注明出处:Flutter学习笔记(7)--Dart异常处理 Dart作为高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式,基于mixin的继承方式是指:一个类可以继承自多 ...
- 学习笔记《简明python教程》
学习笔记<简明python教程> 体会:言简意赅,很适合新手入门 2018年3月14日21:45:59 1.global 语句 在不使用 global 语句的情况下,不可能为一个定义于函数 ...
- python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...
- python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...
随机推荐
- zoj4020 Traffic Light(bfs+状态压缩)
题意:每个点有两种状态,0/1,0表示只能上下方向走,1表示只能左右方向走.每走一步整个图的状态改变一次(即0->1,1->0). 数据范围:n,m<=1e15 开始迷之因为数组太大 ...
- webpack 4 入坑及爬坑记录
一.安装 在本机安装好nodejs的基础上,window操作系统,cmd打开控制台,添加到创建的文件夹下 npm init //初始化npm npm install webpack --save-de ...
- 基于jeesite+android开发 电子商务系统免费教程
下载地址: jeesite免费教程 基于jeesite+android开发 电子商务系统免费教程 基于jeesite+android开发 电子商务系统免费教程 这个教程已经录制完很久了,一直没有公开, ...
- javascript中创建对象的几种不同方法
javascript中创建对象的几种不同方法 方法一:最直白的方式:字面量模式创建 <script> var person={ name:"小明", age:20, s ...
- 【BZOJ2127】happiness 最小割
题目大意:有一个$n\times m$的矩阵,矩阵的每个位置上有一个同学,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦 ...
- 多线程编程,CPU是如何解决多线程内存访问问题的
CPU对内存变量的修改是先读取内存数据到CPU Cache中,然后再由CPU做运算,运算完成后继续写入到内存中 在单核CPU中,这完全没有问题,然而在多核CPU中,每一个CPU核心都拥有自己独立的Ca ...
- 剑指offer三十六之两个链表的第一个公共结点
一.题目 输入两个链表,找出它们的第一个公共结点. 二.思路 如果存在共同节点的话,那么从该节点,两个链表之后的元素都是相同的.也就是说两个链表从尾部往前到某个点,节点都是一样的.我们可以用两个栈分别 ...
- (转)Python科学计算之Pandas详解,pythonpandas
https://www.cnblogs.com/linux-wangkun/p/5903380.html-------pandas 学习(1): pandas 数据结构之Series https:// ...
- spring boot的拦截器简单使用
1.spring boot拦截器默认有: HandlerInterceptorAdapter AbstractHandlerMapping UserRoleAuthorizationIntercept ...
- hibernate的配置文件,使用XML方式
<?xml version="1.0" encoding="UTF-8"?> <!-- 标准的XML文件的起始行,version='1.0'表 ...