面向对象编程,简称OOP, object oriented programming
OOP编程的三大特性:封装,继承,多态
1. 封装
把功能的实现细节封装起来,不对外暴露。只留出入接口。
2. 继承
为了将代码重用,所以需要基础。包括单继承/多继承
在2.7中,经典类,遵从深度优先原则进行继承;新式类,遵从广度优先原则
在3.0以后,不论经典类还是新式类,都遵从广度优先原则。以后请全部按新式类来书写!
经典类: class Foo
新式类: object是所有类的基类,Foo继承基类object,Foo类的构造函数基于基类进行了重构
class Foo(object) :
def __init__(self,name,age,salary,course):
super(Foo,self).__init__(self,name,age,salary) # super是一个特殊的类,使用此语法,将父类的构造方法在子类构造方法中执行
#object.__init__(self,name,age,salary) 此行是经典类中的写法。尽量不要这样写。因为在多继承中,该写法意味着需要显示地调用多个父类的构造方法,容易出问题
self.salary = salary
self.sex = sex
3. 多态
一种接口,多种实现
类:
属性attribute
实例变量:存在每个对象的内存里
类变量:存在类的内存里,所有实例共享这个变量
私有属性/公有属性:带两个下划线__的变量如__var,是私有属性,只能在类的内部被调用
方法function
方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。
-
- 普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;
- 类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;def上一行加上@classmethod
- 静态方法:由类调用;无默认参数;def上一行加上@staticmethod