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  眼镜男  阅读(240)  评论(0)    收藏  举报