面试的时候被问到几次python的OOP都挂了,决定认真的学一遍~~

python的面向对象的设计和c++等编译语言不同,主要注意的是:

  1. python的类没有访问权限的问题,也就是说所有的变量都是可访问的。
    实际上python有私有的机制,就是在属性前加__,但是这种私有机制实际上也是伪私有,因为它其实是用一个别名来保存这个属性。
    例如在类A中的self.__a = 4, 实际上__a被修改成了_A__a保持在类中了。
  2. 没有static的说法了,类和实例是区分看待的,一个属性或者方法可以属于类也可以属于实例。

    看下面的例子

    class A:
        i = 'class var'
        def __init__(self):
            self.i = 'instance var'

    a = A()
    print A.i, a.i

    #result class var instance var

    类和实例之间的元素和函数都是独立的。
    当然如果你要定义属于类的方法,因为旧的对象定义强制方法是要带self参数的,不然调用会出错的,所以需要static函数,可以这样做:

    class A:
        i = 'class var'
        def __init__(self):
            self.i = 'instance var'
        def f(): pass
        f = staticmethod(f)
  3. 类和实例中的属性和方法实际上都是放在类和实例自身的一个字典中,就是__dict__中,所以他们实际上可以看成不同的两个东西。
    类本身也是对象,所以类和实例都可以在程序中的任何地方进行添加,修改和删除。对的你甚至可以用del来删除类中的属性和函数。
  4. 那么当你需要使用类或者实例中的属性和方法时,python是如何寻找的呢?
    python中的所有的类和实例将会根据他们的继承关系组成一个对象属性树。
    树的叶子节点是实例,内部节点根据类之间的继承关系来决定。
    当使用A.a的方法来查找一个节点中的某个元素时,它将在这棵树上进行搜索,如果当前节点没有该元素则向上继续搜索直到根节点,如果向上的过程中出现两条以上路径(想想为什么有这种情况),则从左边向上走,如果到根节点还没有找到,那么返回到出现分叉的点再往右一条路向上。
    这种寻找方法即使出现了多重继承(其实就是上面说的两条以上路径)也不用担心出现C++中的情况。

    大概就这些,我发现大部分面试时候还是考的这种我第4点中说的,所以其实想明白很重要。。而且我认为这种方法还是相当优雅滴~~

转载于:https://www.cnblogs.com/kakafei/archive/2010/11/03/1866666.html

Python OOP总结相关推荐

  1. python oop求三角形面积公式_Python OOP --action()函数

    我不熟悉Python OOP并尝试创建OOP程序来管理库.这段代码来自一本书. 此代码正常工作,但我需要了解action()在选择特定选项时如何调用相应函数,例如:当我选择1时,即使我们不调用show ...

  2. python oop编程_Python 3中的面向对象编程(OOP)

    python oop编程 In this article you'll pick up the following basic concepts of OOP in Python: 在本文中,您将了解 ...

  3. 转Python OOP(1):从基础开始

    转自  http://www.cnblogs.com/BeginMan/p/3510786.html 本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassNam ...

  4. Python OOP知识积累

    目录 目录 前言 对象 类 面向对象 Python 面向对象编程三个基本特征 封装 继承 继承的作用 泛化与特化 实现继承的方式 多重继承 多态 方法多态 最后 前言 Python是一个功能非常强大的 ...

  5. python oop 继承_oop-在Python中继承方法的文档字符串

    oop-在Python中继承方法的文档字符串 我有一个带有文档字符串的OO层次结构,它需要与代码本身一样多的维护. 例如., class Swallow(object): def airspeed(s ...

  6. javascript消除字符串两边空格的两种方式,面向对象和函数式编程。python oop在调用时候的优点...

    主要是javascript中消除字符串空格,比较两种方式的不同 //面向对象,消除字符串两边空格 String.prototype.trim = function() { return this.re ...

  7. python oop编程_23 Python - 面向对象编程OOP

    面向对象编程OOP 01 方法__repr__()和__str__() __repr__()方法类似java中的toString方法,用于反馈类的相关信息且可以自己定义,一般用于开发人员控制台调试 _ ...

  8. python oop示例_python 面向对象oop

    1 oop 对象世界观  -- oop是目前人类认知最接近实际生活的语言 一切事务皆对象 对象有运动规律和内部状态 对象之间可以相互调用 2.面向对象 唯一性:对象具有唯一性,不存在两个相同的对象,除 ...

  9. python oop 继承_关于oop:使类数据在python中可继承的正确方法是什么?

    我是Python的新手,来自Perl领域. 我正在尝试确定关于类数据的存储和访问的最佳实践,以便它可以被子类继承并可能进行扩展.阅读Python 2.7文档(我确实使用2.6),深入研究Python和 ...

最新文章

  1. 本科刚毕业有点迷茫,想入门单片机,应该怎么开始?
  2. 体验cygwin纪实
  3. Linux 系统学习梳理_【All】
  4. 【错误记录】Android Studio 配置 AspectJ 报错 ( Failed to create Jar file C:\xxx\aspectjtools-1.8.10.jar. )
  5. java socket smtp_JAVA Socket实现smtp发送邮件
  6. nginx 指向一个文件夹_弄懂nginx的语法就是这么简单
  7. Leecode刷题热题HOT100(11)——盛水最多的容器
  8. NGUI中的Table自定义排序
  9. idea mysql删除_IntelliJ IDEA 配置Mysql5.7 带图文详解 视频讲解
  10. vivado与modelsim的联合仿真
  11. disp语句怎么格式 matlab_matlab输出语句print
  12. 国内nodejs下载网站
  13. 网管必用的10款软件系统
  14. 若依ruoyi框架整合magic-api快速开发
  15. AX9000利用docker实现迅雷远程下载2
  16. Jetson Tegra X系列刷机教程
  17. XTP界面在Dialog里的实现
  18. 2022安全员-C证考试题模拟考试题库及模拟考试
  19. 处理window11无法连接网络共享打印机
  20. 存款买房python

热门文章

  1. 进程通信学习笔记(记录上锁)
  2. 网络编程学习笔记(非阻塞connect)
  3. 记录工作中linux相关操作
  4. 這麼多年興許從來沒有釋放過
  5. sql case when 速记
  6. iis5顺利安装诀窍
  7. html元素排序,HTML中的table里面的元素排序
  8. 使用nginx后如何在web应用中获取用户ip及原理解释
  9. 用eclipse创建WebService Step by Step
  10. c语言入门至精通(全集),C语言入门至精通(全集)知识讲解.ppt