python中的面向对象编程

时间:2022-12-17 16:40:41

在python中几乎可以完成C++里所有面向对象编程的元素。

继承:python支持多继承:

class Derived(base1, base2, base3):

pass

多态:python中的所有实例方法都是virtual类型的

封装:

  这个比较特殊,C++编程中一直强调得比较多的是:为了隐藏实现,所有的成员变量都要是private类型的,还有那些仅与实现相关的,不作为外部接口的方法都要定义成private类型的(或者protected)。但是在python里面,并不存在真正的私有类型,根据google python style guide,对于简单的成员变量访问,应该直接通过成员的方式而不用特意定义一个访问函数。还有一点,实现private的方式是通过代码混淆。且看下面的代码:

class T(object):
    def __init__(self):
        self.__x = 1.0
    def __func(self):
        print("test")
t = T()
t._T__func()
print(t._T__x)

由于成员的名字前面加了两个下划线(要求是至少两个),所以最终形成的成员名字被混淆了,不能按照原名字访问了。但是依旧可以访问,所有python里面的私有访问控制

更多的是一种惯例而不是语言特性上直接隔离。

最后,关于python中的类的理解,感觉更像是namespace(可以理解为一个哈希表,可以将名字与变量id对应起来),而且其中的名字还能动态添加(比如给一个实例添加一个成员变量)

python中的面向对象编程的更多相关文章

  1. Python 中的面向对象编程

    面向对象编程(Object-oriented programming, OOP)是一种基于对象概念的编程范式,可包含属性(attribute)形式的数据以及方法(method)形式的代码.另一种对 O ...

  2. Python中的并发编程

    简介 我们将一个正在运行的程序称为进程.每个进程都有它自己的系统状态,包含内存状态.打开文件列表.追踪指令执行情况的程序指针以及一个保存局部变量的调用栈.通常情况下,一个进程依照一个单序列控制流顺序执 ...

  3. Python:笔记(3)——面向对象编程

    Python:笔记(3)——面向对象编程 类和面向对象编程 1.类的创建 说明:和Java不同的是,我们不需要显示的说明类的字段属性,并且可以在后面动态的添加. 2.构造函数 构造函数的功能毋庸置疑, ...

  4. Python学习之==>面向对象编程(二)

    一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...

  5. Python 中的 TK编程

    可爱的 Python:Python 中的 TK编程 http://www.ibm.com/developerworks/cn/linux/sdk/python/charm-12/ python che ...

  6. 可爱的 Python : Python中的函数式编程,第三部分

    英文原文:Charming Python: Functional programming in Python, Part 3,翻译:开源中国 摘要:  作者David Mertz在其文章<可爱的 ...

  7. 22&period;python中的面向对象和类的基本语法

    当我发现要写python的面向对象的时候,我是踌躇满面,坐立不安呀.我一直在想:这个坑应该怎么爬?因为python中关于面向对象的内容很多,如果要讲透,最好是用面向对象的思想重新学一遍前面的内容.这个 ...

  8. Python中的多线程编程,线程安全与锁&lpar;二&rpar;

    在我的上篇博文Python中的多线程编程,线程安全与锁(一)中,我们熟悉了多线程编程与线程安全相关重要概念, Threading.Lock实现互斥锁的简单示例,两种死锁(迭代死锁和互相等待死锁)情况及 ...

  9. Python中的并行编程速度

    这里主要想记录下今天碰到的一个小知识点:Python中的并行编程速率如何? 我想把AutoTool做一个并行化改造,主要目的当然是想提高多任务的执行速度.第一反应就是想到用多线程执行不同模块任务,但是 ...

随机推荐

  1. loadrunner关联边界乱码

    问题现象: 如上图中的我想关联 <ins class="curmarker" id="cur2494"></ins><ins cl ...

  2. ios 开发之 Xcode6 No valid signing identities &lpar;i&period;e&period; certificate and private key pair&rpar; matching&period;&period;&period;

    之前的项目用证书真机测试过,我想再无证书Build,出现下面的报错提示! 下面的team我无法改成None!一点击None选的还是Unhonw name(JPGE28K3W9)这个是报错的关键 最后由 ...

  3. SharePoint 2010在win7 x64 安装

    转:http://kaneboy.blog.51cto.com/1308893/328000 关于<SharePoint 2010应用程序开发指南>,我和杜伟同学正在撰写中,希望下半年早点 ...

  4. Crgwin 简介及安装

    Crgwin 简介 Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnus solutions公司开发的*软件(该公司开发的著名工具还有eCos,不过现已被Redhat收购 ...

  5. Entity Framework入门教程(15&rpar;---DbContext追踪实体状态改变

    这一节介绍DbContext追踪实体的变化.EF支持DbContext在其生命周期中自动追踪加载的实体.我们可以通过DbChangeTracker类获取DbContext追踪的所有实体的变化. 注意每 ...

  6. 【算法】LeetCode算法题-Remove Element

    这是悦乐书的第150次更新,第152篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第9题(顺位题号是27).给定整数数组nums和值val,删除nums中所有的val值, ...

  7. Android 开发 VectorDrawable 矢量图 (二)了解矢量图属性与绘制

    VectorDrawable 矢量图 三部曲: Android 开发 VectorDrawable 矢量图 (一)了解Android矢量图与获取矢量图 Android 开发 VectorDrawabl ...

  8. MP实战系列&lpar;四&rpar;之DAO讲解

    说到DAO不得不提一个开发名词"三层架构",所谓的三层架构是什么呢?简单的可以概括为数据访问层,业务逻辑层,界面层(又称表现层). 这也是我们Java开发常用的手段,经常有人将三层 ...

  9. PAT 1048 数字加密

    https://pintia.cn/problem-sets/994805260223102976/problems/994805276438282240 本题要求实现一种数字加密方法.首先固定一个加 ...

  10. android adb命令 unable to connect to 192&period;168&period;1&period;155&colon;5555

    如果使用有线网络无法用adb connect命令连接设备的话,可以选择使用无线wifi来连接. 首先在android设备上装一个叫做Adb Wireless的软件,打开wifi,然后打开adb wir ...