面向对象

面向对象最重要的就是类和实例。
Python中通过class关键字定义类,使用类名加括号创建实例。前后下划线的init函数可以在创建实例时做一些初始化工作。在类中定义函数时,第一参数永远是实例变量self,调用时候不用传递。

calss A(object):passb = A()

在这个示例中有三个对象,object和A都是class对象,b是实例对象。这里面存在两种关系。Object和A是 is-kind-of 关系,基类和子类之间的关系,A和b是 is-instance-of 关系,类和示例的关系。
Python中有两种对象,类对象和实例对象。实例b的type对象就是A,那A这个class对象的type就是metaclass对象,在python内部,对应的就是PyType_Type。Metaclass记录了class对象的一部分元信息,包括class对象的type,应该如何创建,分配多少内存等。这部分元信息被称为静态元信息。相应的动态元信息就是class对象的属性表,包含了class的属性和方法。这部分前面也说过。通过调用metaclass对象可以创建class对象,而调用class对象会得到实例对象。

Python中类和实例可以随时增加属性和方法。类增加的属性,实例可以即时访问;实例增加的属性,类不可以访问。

class MyClass:def method(self):return "instance method called",self@classmethoddef classmethod(cls):return "class method called",cls@staticmethoddef staticmethod():return "static method called"

第一个就是普通的实例方法,需要一个self参数指向一个实例。
第二个使用classmethod装饰器的是类方法,不接受self参数,接受一个class参数用来指向类。
第三个用staticmethod装饰的是静态方法,不接受self和class参数。它属于某个命名空间。
实例只能调用实例方法和静态方法,无法调用类方法。使用类名可以调用类方法和静态方法。
可以使用类方法实现类的不同构造函数;静态方法作用和普通函数类似,但属于类的命名空间。

下划线

在python中,定义属性时,下划线有着特殊含义。总共有五种下划线模式和命名约定。
– 前置单下划线:约定的私有变量,不是公共接口,尽量不要访问。而且使用通配符*调入模块时,python不会导入带有前置单下划线的名称。除非定义了__all__列表
– 后置单下划线:可以在保留字后加单下划线来绕过命名冲突
– 前置双下划线:python解释器遇到前置双下划线会进行名称改写,来避免子类命名冲突,一般是加上类名的改写。所以类和实例对象无法直接访问
– 前后双下划线:前后双下划线命名不会被python解释器进行名称改写,可以被类和对象调用
– 单下划线:用来表示临时的无关的变量,比如for循环中

Python源码学习(四)相关推荐

  1. Python源码学习:Python函数浅析-有参函数

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 继续上一篇无参函数的调用后,本文将分析Python中的有参函数的大致流程,在Pyth ...

  2. python源码学习_【Python学习】Python源码阅读(一)

    最近想读读Python源码,任何东西学习方法基本都是一样的,先从总体框架进行了解,再从自己侧重的方面逐步深入. 1. Python总体架构 左边是Python提供的大量的模块.库以及用户自定义的模块. ...

  3. Python源码学习笔记:Python程序执行过程与字节码

    Python程序执行过程与字节码 注:本篇是根据教程学习记录的笔记,部分内容与教程是相同的,因为转载需要填链接,但是没有,所以填的原创,如果侵权会直接删除. 问题: 我们每天都要编写一些Python程 ...

  4. Python源码学习:多线程实现机制

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 本文分析Python中的多线程机制,主要通过一个多线程的脚本来分析多线程的基本操作与 ...

  5. Python源码学习:Python类机制分析-用户自定义类

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 上一文,分析了Python在启动初始化时,对内置类的一个基本的初始化流程,本文就简析 ...

  6. Python源码学习:Python类机制分析

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 本文主要分析Python中类时如何实现的,在Python中,一切都是对象:任何对象都 ...

  7. Python源码学习:Python函数浅析-函数闭包

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 上一篇分析了函数参数的分析后,本文分析函数闭包的实现.函数闭包即函数定义和函数表达式 ...

  8. Python源码学习:Python函数浅析-无参函数

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 本文会大致分析一下Python中的函数机制.在Python中,函数是一个比较重要的类 ...

  9. Python源码学习:内建类型简析并简析int对象

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 上一篇文章中已经大致分析了下,Python的启动执行流程,现在我们分析一下Pytho ...

  10. Python源码学习:启动流程简析

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> Python简介: python主要是动态语言,虽然Python语言也有编译,生成中 ...

最新文章

  1. Sublime Text 自动换行
  2. 面试官问:对象池技术了解吗?apache common pool2呢?
  3. Golang + vscode 开发环境配置
  4. Tensorflow之调试(Debug) tf.py_func()
  5. php去掉两个数组重复数据,php两个数组怎么去除重复
  6. [html] 跨域通信有哪些方式?
  7. static内容相关介绍学习
  8. 浅析ASP.NET应用Autofac获取页面服务
  9. 大学生计算机考试题题库,大学生统考计算机一级考试试题题库(供参考)
  10. 凭几句话的方案,你什么也做不了
  11. 015-JVM-使用javap查看class文件内容
  12. Java实现八皇后算法
  13. UVA - 1589 Xiangqi (象棋)
  14. Cisco命令合集-1
  15. Vmware 和宿主机之间的网络互通
  16. 软件架构图该怎么画?架构设计如何标准化?
  17. GPS北斗卫星时钟同步系统的原理和技术
  18. Prometheus+Grafana监控告警配置
  19. 【WebApp】离线webapp (android)开发
  20. CSS Grid 布局完全指南(图解 Grid 详细教程)

热门文章

  1. 鼎捷ERP易飞9.0.8实战课程-卓致羽-专题视频课程
  2. 纯Java代码实现 企业微信钉钉 机器人群+告警
  3. 深度解析copy与strong的区别
  4. CodeBlock 基本使用
  5. 1.spring入门 - spring实战第五版
  6. HBase数据库结构、存储理解(举例解释、容易理解、深入浅出)
  7. 基于用户的协同过滤算法 1
  8. Guice依赖注入(Scope)
  9. 鸿蒙系统和全屋智能,不断升级“常用常新” 搭载鸿蒙系统的全屋智能有多酷?...
  10. VMware Workstation 12 Pro的安装