一、课前内容回顾

继承作用:提高代码的重用性(要继承父类的子类都实现相同的方法:抽象类、接口)

继承解释:当你开始编写两个类的时候,出现了重复的代码,通过继承来简化代码,把重复的代码放在父类中。

单继承:

  重用性:减少代码的重复,子类可以复用父类的方法

  派生:子类在父类的基础上又创建了自己的新的方法和属性

      子类中有父类的同名方法:只用子类的

      还希望用到父类中的方法:父类名(self,...)、super(...)调用

  抽象类:只能被继承,不能被实例化 模板、规则

抽象类的模板:

from abc import ABCMeta,abstractclassmethod   # 从模块中导入类,函数
class A(metaclass=ABCMeta): # 元类
@abstractmethod # 装饰器
def func(self):pass

多继承     python/c++

      java/c#没有

  每个类中有每个类能完成的方法

  创建子类的时候只需要挑选和我相符的父类来继承就能够完成父类的功能了

接口:java中的一种数据类型

经典类和新式类的区别

  #经典类:不主动继承object、没有mro方法、没有super、遵循深度优先

  #新式类:主动继承object、有mro方法、有super、遵循广度优先

二、多态

什么是多态?

    一个类表现出的多种状态,:通过继承来实现

    在java中的表现:在一个函数中需要给参数指定数据类型,如果这个地方可以接收两个以上类型的参数,那么这个类型应该有一个父类,这个父类是所有子类对象的类型

    在Python中:函数的参数不需要指定数据类型,所以我们不需要通过继承的形式来统一一组类的类型,换句话说,所有的对象其实都是object类型,所以在Python当中其实处处是多态。

  def fun(a):

      a既可以传猫也可以传狗类,随便传任意类型

鸭子类型

def len(obj)

len() # str list tuple dict set rang(3)

print() # 所有的对象都是鸭子类型

特点:不是明确的通过继承实现的多态

    而是通过一个模糊的概念来判断这个函数能不能接收这个类型的参数。

三、封装

  广义的封装 :把属性和方法放到类里

    class 类名:

      def 方法1(self):pass

  作用:是为了只有这个类的对象才能使用定义在类中的方法

  狭义的封装 :定义私有成员

class A:
__a = 10
# print(__a) # 类里面直接调用
def func(self):
print(A.__a)
aa = A()
aa.func()
print(aa._A__a) # 外面调用使用_类名__私有属性

特点:

在类的外部不能引用私有的静态变量
类中的静态变量和方法名在程序加载的过程中就执行完了,不需要等待调用
在这个类加载完成之前,Goods这个名字还没有出现在内存空间中
私有的静态属性可以在类的内部使用,用来隐藏某个变量的值
编程规范的角度上出发,我们不能在类的外部使用私有的变量
类中的私有成员
私有的静态属性
私有的对象属性
私有的方法

把一个名字藏在类中

class Student:
def __init__(self,name):
self.__name = name
def name(self):
return self.__name
zhuge = Student('诸葛') # 查看对象中的私有属性
print(zhuge.name())

私有属性与对象中的私有属性的调用

class Goods:
__discount = 0.7 # 私有的静态变量
def __init__(self,name ,price):
self.name = name
self.__price = price
def price(self):
return self.__price*Goods.__discount # 私有属性与对象中的私有属性的调用
apple= Goods('apple',5000)
print(apple.price())

实例应用

class User:
def __init__(self,username,password):
self.usr = username
self.__pwd = password
self.pwd = self.__getpwd()
def __getpwd(self):
return hash(self.__pwd)
obj = User('alex','alex3714')
print(obj.usr,obj.pwd) # alex 5616937197111795784
私有制的作用:
不让看
不让改
修改有限制
有些方法或者属性不想被子类继承

四、property的用法

property是一个装饰器
所有的装饰器函数怎么用?在函数、方法、类的上面一行直接@装饰器的名字,装饰器函数
from math import pi
class Circle:
def __init__(self,r):
self.r = r
@property
def area(self):
return self.r**2*pi
@property
def perimeter(self):
return 2*self.r *pi
c1 = Circle(10)
print(c1.area)
print(c1.perimeter)

python基础学习 Day19 面向对象的三大特性之多态、封装 property的用法(1)的更多相关文章

  1. python基础学习 Day19 面向对象的三大特性之多态、封装

    一.课前内容回顾 继承作用:提高代码的重用性(要继承父类的子类都实现相同的方法:抽象类.接口) 继承解释:当你开始编写两个类的时候,出现了重复的代码,通过继承来简化代码,把重复的代码放在父类中. 单继 ...

  2. python基础学习Day17 面向对象的三大特性之继承、类与对象名称空间小试

    一.课前回顾 类:具有相同属性和方法的一类事物 实例化:类名() 过程: 开辟了一块内存空间 执行init方法 封装属性 自动的把self返回给实例化对象的地方 对象:实例 一个实实在在存在的实体 组 ...

  3. Java基础-面向对象第三大特性之多态(polymorphism )

    Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...

  4. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  5. 3.java面向对象编程三大特性之多态

    面向对象编程的三大特性:封装.继承.多态 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对类的外部而言它的内部实现细节是隐藏的,暴露给外界的只是它的实现方法. ...

  6. python基础学习笔记——面向对象初识

    面向对象初识 python中一切皆对象. 类有两种: 新式类:在py3中所有类都是新式类 经典类:在py2中只有类本身继承了object类才叫做新式类,默认是经典类 class Person: cou ...

  7. python基础学习Day15 面向对象、类名称空间、对象名称空间 (2)

    一.类 先看一段代码: class Person: animal = '高级动物' walk_way = '直立行走' # 静态属性,静态变量,静态字段 language = '语言' def __i ...

  8. python面向对象的三大特性之一多态

    多态 多态的特性是调用不同的子类将会产生不同的行为,而无需明确知道这个子类实际上是什么 说白了就是,不同的对象调用相同的方法,产生不同的行为 例如:s1是字符串类型,w1是列表,两个完全不同的对象,他 ...

  9. Python - 面向对象编程 - 三大特性之多态

    前置知识 封装 详解文章:https://www.cnblogs.com/poloyy/p/15203989.html 封装根据职责将属性.方法封装到一个抽象的类中 定义类的准则-封装 继承 详解文章 ...

随机推荐

  1. TextView右上角显示小红点,小红点根据TextView的长度移动,小红点被TextView挤出去不显示的问题;

    大概就是图片这个样,这个功能很常见,本来我以为很简单,谁知道真的很简单: 遇到点小问题,记录一下,哈哈: 小红点的Drawable: <?xml version="1.0" ...

  2. SDOI2018IIIDX

    /* 题目转换为 n个节点的一片森林,n个权值,要给每个节点分配一个权值,保证子节点的权值不小于父节点的权值,并且1~n的权值的字典序最大. 考场上的贪心很显然 建立出 树来 将所有数值从大到小排序 ...

  3. linux:ubuntu安装mysql(一)

    1.下载MySQL安装包(MySQL Community Server) 地址:https://dev.mysql.com/downloads/mysql/ 2.解压 tar -xvf mysql-s ...

  4. 'pip' 不是内部或外部命令

    安装好Python,在环境变量Path中加入相应路径信息后,Python命令没问题,但是运行pip失败: 'pip' 不是内部或外部命令,Pip工具已经自带安装好了,只是跟Python命令一样,需要我 ...

  5. gentoo kvm qemu virt-manager - Unable to complete install: error creating macvtap interface macvtap0@: Operation not supported'

    碰到这个一般是内核没有开启相应的 macvtap 选项,开启相应选项后,就不会报错了. Device Drivers ---> Network Device Support ---> &l ...

  6. Java课程作业之动手动脑(六)

    1.使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件. import java.io.IOException; import java.nio.file ...

  7. Oracle12c Client安装出现"[INS-30131]"错误“请确保当前用户具有访问临时位置所需的权限”解决办法之完整版

    管理工具>计算机管理>系统工具>共享文件夹>共享 右键单击“共享”>新建共享> 如果出现右键无法出现“新建共享”选项请"控制面板>所有控制面板项&g ...

  8. 11.纯 CSS 创作一个荧光脉冲 loader 特效

    原文地址:https://segmentfault.com/a/1190000014700727 HTML代码: <html> <head> <link rel=&quo ...

  9. python中的get

    get()根据键获取字典中的值,如果键不存在则返回一个默认值,默认值不填写则返回None 1 a = { 2 "name":"dlrb", 3 "ag ...

  10. Win7平台下配置Sublime Text2 的C++编译环境

    Sublime Text 是一个跨平台的编辑器,之前在 Mac 上成功配置了 C++ 在 Sublime Text 的编译环境,接下来介绍下载 windows 平台下的环境配置. 1. 首先判断机器上 ...