抽象类,接口类

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 面向对象------抽象类(接口类), 多态, 封装的更多相关文章

  1. python面向对象 : 抽象类(接口类),多态,封装(私有制封装)

    一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...

  2. python day - 19 抽象类 接口类 多态 封装

    一. 抽象类接口类即制定一个规范 特点: 1.不可被实例化. 2.规范子类当中必须事先某个方法. 3.在python中有原生实现抽象类的方法,但没有原生实现接口类的方法. 例题:制定一个规范就是,子类 ...

  3. python 全栈开发,Day21(抽象类,接口类,多态,鸭子类型)

    一.昨日复习 派生方法和派生属性 super 只有在子父类拥有同名方法的时候, 想使用子类的对象调用父类的方法时,才使用super super在类内 : super().方法名(arg1,..) 指名 ...

  4. Java学习笔记(六):面向对象、接口和抽象类

    类和对象 Java是一门面向对象的语言,下面我们来了解一下Java中的面向对象. 方法和重载 Java中的方法格式如下: 访问修饰符 返回值类型 方法名(参数){ 方法主体 } Java的方法支持重载 ...

  5. python学习笔记(十九)面向对象编程,类

    一.面向对象编程 面向对象,是一种程序设计思想. 编程范式:编程范式就是你按照什么方式去编程,去实现一个功能.不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路,两种最重要的编程范式分 ...

  6. Flutter学习笔记(8)--Dart面向对象

    如需转载,请注明出处:Flutter学习笔记(7)--Dart异常处理 Dart作为高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式,基于mixin的继承方式是指:一个类可以继承自多 ...

  7. 学习笔记《简明python教程》

    学习笔记<简明python教程> 体会:言简意赅,很适合新手入门 2018年3月14日21:45:59 1.global 语句 在不使用 global 语句的情况下,不可能为一个定义于函数 ...

  8. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  9. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...

随机推荐

  1. Android逆向-Android基础逆向7(内购干货集合)

    本文作者:MSTLab-EvilChen 0×00 前言 首先,本来想写NDK的,但是还是先把这个流程过一遍吧,这个流程是必不可少的.其次,RMB真的是一个好东西. 导航 由于本人为了节省时间,不想贴 ...

  2. POST 400 (BAD REQUEST)

    遇到这种错,1,F12打开控制台,2,点击network,找到发送的请求. 3,点击请求,4,看右侧的 Header Preview Response 应该能找到原因. 就拿刚才来说,找了好几个小时原 ...

  3. centos7硬盘分区

    首先在虚拟机的设置中为系统添加硬盘 使用fdisk -l /dev/sdb   查看未分区的硬盘 fdisk -l /dev/sda  这是已经分区好得 接下来我们就要对sdb进行分区: 首先使用fd ...

  4. XorPay.com 支付平台介绍【免费申请个人微信支付接口】

    XorPay 支付平台介绍 XorPay 定位为个人 / 独立开发者 / 个体户 / 小微企业提供安全.简单.稳定.正规的收款服务.目前支持微信 NATIVE / JSAPI / 收银台 / 小程序 ...

  5. Linux必备命令

      目录                                                              概述 常用系统工作命令 系统状态检测命令 工作目录切换命令 文本文件 ...

  6. WinForm—串口通讯

    ialPort(串行端口资源) 常用属性: BaudRate 此串行端口上要使用的波特率 DataBits 每发送/接收一个字节的数据位数目 DtrEnable 在通讯过程中是否启用数据终端就绪(St ...

  7. php 常见图片处理函数封装

    <?php /** * 常见图像处理函数的封装 */ class Image{ private $info=[]; private $width;//原始图片宽度 private $height ...

  8. spring boot整合RabbitMQ(Direct模式)

    springboot集成RabbitMQ非常简单,如果只是简单的使用配置非常少,springboot提供了spring-boot-starter-amqp项目对消息各种支持. Direct Excha ...

  9. web与app测试的区别

    单纯从功能测试的层面上来讲的话,APP 测试.web 测试 在流程和功能测试上是没有区别的. 系统架构方面: web项目,一般都是b/s架构,基于浏览器的 app项目,则是c/s的,必须要有客户端,用 ...

  10. 关于Spring配置的一些东西

    Spring 配置的三种方式:JAVA配置,注解配置,和XML的配置 注解配置: @Service:标识服务层(业务层)组件 @Component:基本注解, 标识了一个受 Spring 管理的组件( ...