面向对象的三大特征

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

注意: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. Linux 开发之线程条件锁那些事

    2019独角兽企业重金招聘Python工程师标准>>> 条件锁即在一定条件下触发,那什么时候适合用条件锁呢,那当然是你在等待一个符合的条件下触发.一个常用的例子就是在线程中无限循环执 ...

  2. JAVA大数几算--HDU 2054 A == B ?

    Problem Description Give you two numbers A and B, if A is equal to B, you should print "YES&quo ...

  3. 题目分享I

    题意:2*n的地面,q次操作,每次操作将地面翻转,若该地是地面那翻转就成熔岩,如果是熔岩那翻转就成地面,熔岩人不能走,问人是否能从1,1走到2,n (ps:1,1和2,n不会在翻转的范围内,n,q≤1 ...

  4. 工厂模式(factory pattern)

    工厂模式主要用来封装对象的创建,有3种分类:简单工厂(simple factory).工厂方法(factory method).抽象工厂(abstract factory). 简单工厂包括3种组成元素 ...

  5. 【面试题】String类、包装类的不可变性

    不可变类的意思是创建该类的实例后,该实例的实例变量是不可改变的.Java提供的8个包装类和String类都是不可变类.因此String和8个包装类都具有不可变性. 就拿String类来说,通过阅读St ...

  6. ssrf爆破mysql

    php ssrf 代码<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $_GET['url']); #curl_setopt($ch ...

  7. Java——SSM整合所需的Maven配置文件

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  8. 【Hadoop离线基础总结】zookeeper的介绍以及集群环境搭建、网络编程和RPC的简单了解

    ZooKeeper的介绍以及集群环境搭建.网络编程和RPC的简单了解 ZooKeeper介绍 概述 ZooKeeper是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性问题.例如 ...

  9. Viterbi-Algorithm(维特比)算法

    CSDN博客:皮乾东  知乎:Htrying  微博:Htring的微博  微信公众号:自然语言处理爱好者(ID:NLP_lover)  文章来自:<数学之美> Viterbi-Algor ...

  10. uCOS2014.1.10

    uC/OS-Ⅱ任务的结构有两种:一种是无限循环结构:另一种是只执行一次的程序结构.若采用只执行一次的程序结构,就要用任务删除函数来实现. uC/OS-Ⅱ进行任务的管理是从调用启动函数OSStart() ...