博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python OOP总结
阅读量:4311 次
发布时间:2019-06-06

本文共 1130 字,大约阅读时间需要 3 分钟。

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点中说的,所以其实想明白很重要。。而且我认为这种方法还是相当优雅滴~~
posted on
2012-04-11 15:16 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/linyawen/archive/2012/04/11/2442411.html

你可能感兴趣的文章
代码示例_进程
查看>>
Java中关键词之this,super的使用
查看>>
人工智能暑期课程实践项目——智能家居控制(一)
查看>>
前端数据可视化插件(二)图谱
查看>>
kafka web端管理工具 kafka-manager【转发】
查看>>
获取控制台窗口句柄GetConsoleWindow
查看>>
Linux下Qt+CUDA调试并运行
查看>>
51nod 1197 字符串的数量 V2(矩阵快速幂+数论?)
查看>>
OKMX6Q在ltib生成的rootfs基础上制作带QT库的根文件系统
查看>>
zabbix
查看>>
多线程基础
查看>>
完美解决 error C2220: warning treated as error - no ‘object’ file generated
查看>>
使用SQL*PLUS,构建完美excel或html输出
查看>>
SQL Server数据库笔记
查看>>
X-Forwarded-For伪造及防御
查看>>
android系统平台显示驱动开发简要:LCD驱动调试篇『四』
查看>>
Android 高仿微信头像截取 打造不一样的自定义控件
查看>>
Jenkins的初级应用(1)-Publish Over SSH
查看>>
利用正则表达式群发定制邮件
查看>>
【原】RDD专题
查看>>