面向对象的三大特征

继成、封装、多态:
继承:一个类可以继承一个或多个类,被继承的类叫做父类,继承的类叫做子类
封装:将数据和方法放在了一个类中就构成了封装
多态:指的一类事物有多重形态,一个抽象类有多个子类,不同的子类对象调用相同的
方法,产生不同的执行结果,多态可以增加代码的灵活度

注意:python 中函数的参数没有类型限制 Python严格意义上来讲没有多态,只是伪多态

鸭子类型的提现:
静态语言:对于静态语言(java、C#)来讲上面传入的对象必须是Base类型或者它的子类,否则
将无法调用run 方法
动态语言:对于动态语言Python来讲,上面传入的并不一定是base类型,也可以是其他类型,只要
再内部实现一个run()方法就行了,这就是鸭子类型的提现。

多态的意义:开放封闭原则
1.多个变量,我们只需要知道它是Base类型,无需确切地知道它的子类型,就可以放心的调用子类方法
2.当需要新增功能,只需要新增一个base的子类实现run方法,就可以在原来的基础上进行扩展,这就是
著名的开放封闭原则。
3.对扩展开放:允许新增base 子类
4.对修改封闭:不需要修改依赖base类型的run()函数

私有属性

1.类里面定义的变量叫类属性,那么类属性有两种,分为:公有属性和私有属性
私有属性的定义:
单下划线开头:_attr
双划线开头:__attr 注意:双下划线的开头的私有属性,对外不能直接访问,(它的名字被改变了,
在原有的属性名前面加了一个 _类名)
** 私有属性在类里面也可以被继承。私有属性也可以被类跟实例调用

Python并没有真正的私有化支持,但可用下划线得到伪私有,有一项大多数Python代码都遵循的习惯:
带有下划线,前缀的名称应被视为非公开的API的一部分,它应被视为实现细节,如有更改,恕不另行通知。

2.__dict__

类调用__dict__属性,返回类属性和方法的字典
实例调用__dict__属性,返回的值实例相关的属性和方法

注意:我们在创建类的时候,每一个类都会创建一个__dict__ 属性,这样会非常耗费内存,
如果采用继承就不会再创建__dict__只会在父类创建__dict__(性能优化方面)

3.内置属性__slots__

默认情况下,类的实例有一个字典用于存储属性。这对于具有很少实例变量的对象会浪费内存空间
当创建大量实例时,空间消耗会变得尖锐。

可以通过在类定义中定义__slots__ 来覆盖默认__dict__行为。_slots__声明接受一个实例变量序列
并在每一个实例中只保留足够保存每个变量值的空间。因为没有为每个实例创建__dict__,所以节省空间

注意:__slots__ 这个属性不会被继承,只对当前的类生效

Python面向对象的特征跟私有属性的更多相关文章

  1. Python面向对象静态方法,类方法,属性方法

    Python面向对象静态方法,类方法,属性方法 属性: 公有属性 (属于类,每个类一份) 普通属性 (属于对象,每个对象一份) 私有属性 (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法: ...

  2. Python面向对象三大特征

    继承 面向对象中的继承就是继承的类直接拥有被继承类的属性而不需要在自己的类体中重新再写一遍,其中被继承的类叫做父类.基类,继承的类叫做派生类.子类.在python3中如果不指定继承哪个类,默认就会继承 ...

  3. Python笔记(十八)_私有属性、实例属性、类属性

    私有属性 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,就变成了一个私有属性,只有内部可以访问,外部不能直接访问或修改. 这样就确保了外部代码不能随意修改对象内部的状态,这样通过 ...

  4. python面向对象的特征及反射

    目录 派生类实操 面向对象特征之封装 property伪装属性(python内置装饰器) 面向对象特征之多态 面向对象之反射 派生类实操 1.将时间字典序列化成json格式,由于序列化数据类型的要求, ...

  5. Python面向对象基础:设置对象属性

    用类存储数据 类实际上就是一个数据结构,对于python而言,它是一个类似于字典的结构.当根据类创建了对象之后,这个对象就有了一个数据结构,包含一些赋值了的属性.在这一点上,它和其它语言的struct ...

  6. python面向对象-2深入类的属性

    在交互式环境中输入: >>> class A: a=0 def __init__(self): self.a=10 self.b=100 >>> a=A() > ...

  7. python 面向对象类成员(字段 方法 属性)

    一.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 class Province: # 静态字段 countr ...

  8. python 面向对象(四)--实例属性和类属性

    由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(se ...

  9. python 面向对象静态方法、类方法、属性方法、类的特殊成员方法

    静态方法:只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性. 在类中方法定义前添加@staticmethod,该方法就与类中的其他(属性,方法)没有关系,不能通过实例化类调用方法使用 ...

随机推荐

  1. webpack4.x开发环境配置

    写这篇文章的初衷在于,虽然网络上关于webpack的教程不少,但是大多已经过时,由于webpack版本更新后许多操作变化很大,很多教程的经验已经不适合.当我们使用npm安装webpack时,若不指定w ...

  2. 算法竞赛进阶指南--在单调递增序列a中查找小于等于x的数中最大的一个(即x或x的前驱)

    在单调递增序列a中查找<=x的数中最大的一个(即x或x的前驱) while (l < r) { int mid = (l + r + 1) / 2; if (a[mid] <= x) ...

  3. 动态规划经典算法--最长公共子序列 LCS

    转移方程 代码: //法一: #include <bits/stdc++.h> using namespace std; //---------------https://lunatic. ...

  4. AWVS 安全渗透扫描

    1.打开软件,点击 New Scan 2.在 website url 中输入被扫描的网址,点击 next 3.在 scanning profile 中选择测试的漏洞类型,默认选择 default(默认 ...

  5. 一个简单的wed服务器SHTTPD(3)————SHTTPD多客户端支持的实现

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  6. springboot后端校验

    这一篇讲解了如何定义特殊的校验 https://www.cnblogs.com/cjsblog/p/8946768.html https://blog.csdn.net/xgblog/article/ ...

  7. D. Yet Another Subarray Problem 思维 难 dp更好理解

    D. Yet Another Subarray Problem 这个题目很难,我比赛没有想出来,赛后又看了很久别人的代码才理解. 这个题目他们差不多是用一个滑动窗口同时枚举左端点和右端点,具体如下: ...

  8. 简单谈谈Spring的IoC

    一.前言   这几天正在复习Spring的相关内容,同时想要对Spring的实现原理做一些深入的研究.今天看了看Spring中IoC的实现,找到了一篇非常详细的博客,研究了一个下午,看完之后唯一的感受 ...

  9. 【2020Java最新学习路线】写了很久,这是一份最适合普通大众、科班、非科班的路线

    点赞再看,养成习惯,微信搜索[三太子敖丙]关注这个互联网苟且偷生的工具人. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的 ...

  10. VL01N发货过账无法冲销

    1业务场景 SD和EWM在使用BAPI:BAPI_OUTB_DELIVERY_CONFIRM_DEC发货过账后,发现外向交货单无法被冲销,后来发现是在发货过账后,有一个字段VLSTK声明仓库被维护上了 ...