1. class NewClass(parent):

    def ....    如果没有父类, 则默认继承object类

2. 类属性访问(类似java中的静态属性和方法)直接用类名.属性名, 在python中, 如果没有创建实例, 方法不能被调用。方法必须绑定到一个实例才能直接被调用。

  class C(object):

    foo = 100  访问 C.foo

3. 特殊的类属性: C.__name__, C.__doc__ , C.__bases__, C.__dict__ , C.__module__, C.__class__

4. 在定义方法时,会传入一个self参数, 这个参数代表实例对象本身, 当用实例调用方法时,由解释器传递给方法。

  def func(self, arg1, arg2...)

5. __init__, __new__, __del__

6. 如果定义了构造器,则它不能返回任何对象, 只能返回None

7. 类属性vs实例属性: 类属性可以通过类名.属性名访问, 也可以通过实例.属性名来访问, 类属性只能通过类引用才能更新属性值, 不能通过实例名来更新

  eg: class C(object):

      m = 1

     c = C()

     c.m = 2 并不能更改类属性的值。只是创建了一个新的实例属性。 此时c.m = 2

     del c.m  此时c.m = 1

给一个与类属性同名的实例属性赋值会有效地隐藏类属性,但当删除了这个实例属性时,实例又可以重新访问到类属性。

8. 当在类属性可变的情况下,与上面7的情况就不同了。

  eg: class D(object):

      dict1 = {2003: 'aaa'}

     d = D()

     d.dict1 = {2003: 'aaa'}

     d.dict1[2004] =  'bbb'

     此时d.dict1 = {2003: 'aaa', 2004: 'bbb'}  对于类属性可变的情况下(字典,列表),实例可以修改类属性。

9. 绑定:方法必须绑定到实例,才能够被调用。

10. 静态方法和类方法, staticmethod(func), classmethod(func),也可以通过函数修饰符,@staticmethod, @classmethod

  >>> class STM:
    def foo():

   @staticmethod
        print 'static ....'
    foo = staticmethod(foo)
>>> class CM:

  @classmethod
    def foo(cls):
        print 'class ...'
    foo = classmethod(foo)
11. 继承,   __bases__属性,查看父类,

    子类覆盖了父类中的方法后,再访问父类的原有方法: Parent.func(子类实例)

    eg: Class P(object):

        def foo(self):

          print 'parent... '

       class C(P):

        def foo(self):

          print 'child...'

       c = C()

      P.foo(c)  =====parent...

 或者在子类中显示调用基类的方法

  class C(P):

    def foo(self):

      P.foo(self)

      print 'child...'

在子类为绑定时, 一个更好的方法是使用super()内建方法

  class C(P):

    def foo(self):

      super(C, self).foo()

      print 'child...'

12. 重写__init__不会自动调用父类的__init__的方法,与java不同

13. 类,实例常用的内建函数, issubclass(sub, sup), isinstance(obj1, obj2), hasattr(), getattr(), setattr(), delattr(), dir(), super(), vars ==       __dict__

day10_python学习笔记_chapter13_面向对象编程的更多相关文章

  1. javascript 学习笔记之面向对象编程(一):类的实现

    ~~想是一回事,做是一回事,写出来又是一回事~~一直以来,从事C++更多的是VC++多一些,从面向过程到面向对象的转变,让我对OO的编程思想有些偏爱,将一个客观存在的规律抽象出来总是让人比较兴奋,通过 ...

  2. JavaSE学习笔记05面向对象编程01

    面向对象编程01 java的核心思想就是OOP 面向过程&面向对象 面向过程思想: 步骤清晰简单,第一步做什么,第二步做什么...... 面向过程适合处理一些较为简单的问题 面向对象思想: 物 ...

  3. python 学习笔记7 面向对象编程

    一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...

  4. C++ Primer 学习笔记_67_面向对象编程 --转换与继承、复制控制与继承

    面向对象编程 --转换与继承.复制控制与继承 I.转换与继承 引言: 由于每一个派生类对象都包括一个基类部分,因此能够像使用基类对象一样在派生类对象上执行操作. 对于指针/引用,能够将派生类对象的指针 ...

  5. javascript 学习笔记之面向对象编程(二):继承&多态

    ~~接上篇~~上一篇实现了类的实现以及类成员变量和方法的定义,下面我们来了解下面向对象中两个最重要的特性:继承和多态. 继承 js中同样可以实现类的继承这一面向对象特性,继承父类中的所有成员(变量和属 ...

  6. C++ Primer 学习笔记_69_面向对象编程 --继承情况下的类作用域

    面向对象编程 --继承情况下的类作用域 引言: 在继承情况下,派生类的作用域嵌套在基类作用域中:假设不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义. 正是这样的类作用域的层次嵌套使 ...

  7. Spark学习笔记11面向对象编程

    面向对象编程   11.1 object类 11.1.1定义一个简单的类   11.1.2 field的getter与setter 定义类包含,定义类的field及方法.其格式如下 class Cla ...

  8. C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]

    面向对象编程 --句柄类与继承[续] 三.句柄的使用 使用Sales_item对象能够更easy地编写书店应用程序.代码将不必管理Item_base对象的指针,但仍然能够获得通过Sales_item对 ...

  9. python学习笔记(七):面向对象编程、类

    一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...

随机推荐

  1. 【MFC学习笔记-作业9-基于单击响应的计算平均成绩】【】

    要求..单击出现 一个输入成绩的框,点确定后,计算平均成绩 意义很大~ 完成对话框   再写个鼠标点击的响应部分 鼠标点击的响应部分为难点.... void CWj1401_0302140107_9V ...

  2. SQL Common Sense 碎片一

    1.关于时间 SELECT GETDATE() SELECT DATEPART(d,'2014-05-20 14:20:55.347') SELECT DATEDIFF(d,'2014-05-20 1 ...

  3. node.js querystring处理参数

    C:\Documents and Settings\Administrator\WebstormProjects\untitled6>node> url{ parse: [Function ...

  4. jQuery Uploadify上传插件

    jQuery Uploadify在ASP.NET MVC3中的使用 1.Uploadify简介 Uploadify是基于jQuery的一种上传插件,支持多文件.带进度条显示上传,在项目开发中常被使用. ...

  5. linux通过文件查找依赖关系

    通过文件查找安装包安装缺少libstdc++6这个文件在ls /usr/lib/libstd*下有两个文件/usr/lib/libstdc++.so.6 /usr/lib/libstdc++.so.6 ...

  6. iOS各种类

    http://www.isenhao.com/xueke/jisuanji/bcyy/objc.php http://www.code4app.com 这网站不错,收集各种 iOS App 开发可以用 ...

  7. @property属性

    1. 读写属性(readwrite/ readonly) 默认为readwrite,表示该属性既可以读取,也可以给该属性变量赋值:readonly则表示只能读取该属性变量. 2. 原子属性 (atom ...

  8. 重读LPTHW-Lesson15-17

    1.引入sys模块,argv参数变量解包,可以多一种方式获取用户输入: # filename:argv_test.pyfrom sys import argv script,first,second ...

  9. Android01-概述

    1.Android特点    开源和免费    强大的研发力量,完整的生态圈    互联网服务的支持 2.Android系统架构    应用层    应用框架层    系统运行库层    Linux内 ...

  10. TPen的7种Style和16种Mode

    //TPen 的主要属性有四: Color.Width.Style.Mode {Color: 颜色} {Width: 宽度; 默认是 1; 如果赋予 <= 0 的值, 会使用默认值} {Styl ...