python 面向对象编程

一. 创建类和对象

1. 创建类及类实例

class TestA:
    def func(self):
        print("Test A")

obj = TestA()   # 类对象指针.

创建类的实例, 根据类创建对象.

2. self :

方法的形式参数, 代指执行方法的对象本身, Python 内部自动传递. 可以在类的方法中打印 self, 做测试.

>> class TestA:
      def func(self):
          print(id(self))

>> obj = TestA()
>> id(obj)
140366659413584
>> obj.func()
140366659413584

二. oop 特性之 封装

1.封装的使用场景 :

  1. 当同一类型的方法具有相同的参数时, 直接封装到对象即可.

  2. 把类当做模板, 创建多个对象或子类, 对象内封装的数据可以不一样.

    类在实例化的时候, 携带(封装)其运算所需的数据.

    窃以为, 可以将类比作一台加工机器, 类实例化的对象看做原料, 对象可以加工机器的加工方法, 变成产品.

2.特殊方法 :

__init__() : 构造方法, 用于初始化实例.

    ClsName() --> 自动化执行类中的 __init__() 方法, 执行两个操作 :
        1. 在对象中封装内容;
        2. 创建对象.

__del__()  : 析构方法, 解释器销毁对象时, 自动调用.
    
    if you don't known what are you doing, do not use it.

三. oop 特性之 继承

1.父类/子类 基类/派生类

派生类可以继承基类中所有的方法;
当派生类与基类同事存在相同的方法时, 优先使用派生类的方法(优先使用自己的方法).

2.单继承 :

class TestA:
    def func(self):
        return "func"

class TestB(TestA):
    def func_a(self):
        return 'new func'

* TestB 从 TestA 中继承了 func 方法, 同时拥有自己的方法 func_a . 

3.多重集成 :

python 的面向对象允许派生类继承多个父类. 这在其他的面向对象编程语言中是不允许的, 如Java, C# 等.

class FatherA:
    pass

class FatherB:
    pass

class Son(FatherA, FatherB):
    pass

多重继承中, 在实例化的对象调用方法时, 有限使用对象方法, 如果没有, 则使用继承的父类的方法.

当调用的方法同时存在于多个父类中时, 方法的寻找顺序: 深度优先原则.
多重集成方法寻找顺序

python3 中没有新式类和经典类之分.

4.self 与 继承

self 与继承

示例代码:

class A:
    def bar(self):
        print("BAR")
        self.x()

class B(A):
    def x(self):
        print("B")

class C:
    def x(self):
        print("C")

class D(C,B):
    pass

d1 = D()
d1.bar()    # C

Class A 中的 self.x() 在被 Class D 继承之后, self 在被调用时, 被替换为 Class D 本身, 然后按照 深度优先的原则, 寻找方法. 所以会执行 Class C 中的 x() 方法, 并返回 "C" .

5. 执行父类的构造方法

  1. 方法一 : 推荐

     super(ClassName, self).__init__()   # ClassName 为当前类的类名.
    
  2. 方法二:

     FatherClassName.__init__(self)
    

6.python2.x

1.新式类 :

class TestA:    # 经典类, 深度优先.
    pass

2.经典类 :

class TestA(object):    # 新式类, 广度优先.
    pass

新式类和经典类基类方法寻找顺序

四. oop 特性之 多态

多态, Python 原生多态.

五. 类的成员

类的成员

字段
    普通字段
    静态字段
方法
    普通方法
    类方法
    静态方法
属性
    普通属性

六. 成员修饰符

每一个类的成员都有两种形式 :
共有成员 :
私有成员 :

七. 类的特殊成员

__doc__

__module__ & __class__

__init__

__del__

__call__

__dict__

__str__

__getitem__ , __setitem__, __delitem__

__getslice__, __setslice__, __delslice__

__iter__

__new__ & __metaclass__

八. 扩展 : 在其他面向对象编程语言中的相关概念.

1.重载 : 方法的重载, 函数名相同, 参数个数不同 (python 不支持).

2.重写 : 在派生类中, 重新实现基类中的方法.

3.接口 : interface

当提到接口的时候, 有两类接口 :

  1. 语言内的接口, 代码级别

    Java, C# 有接口一说, 但 python 没有.

    interface 也是关键字, 类似于类, 可以定义方法, 但方法中不可以实现任何功能. 其他的类, 可以可以继承 interface, 并且, 只能定义 interface 中定义的方法.

    接口是用来约束继承者可以实现的方法的.

  2. API 接口, 业务级别.

    如 RUSTful 接口等.

posted @ 2017-03-17 10:30  眼镜男  阅读(221)  评论(0编辑  收藏  举报