0x01 面向对象(OOP)
- 类(class)
* 描述具有相同的属性和方法的对象集合
* 定义了该集合中每个对象所共有的属性和方法
* 对象是类的实例
- object对象
* 一个对象即是一个类的实例化后实例
* 一个类必须经过实例化后,才能在程序内调用
* 一个类可以实例化多个对象,每个对象亦有不同属性
- 类变量
* 类变量在整个实例化的对象中是公用的
* 类变量定义在类中且在函数体之外
* 类变量通常不作为实例变量使用
- 数据成员
* 类变量或者实例变量用于处理类及其实例对象的相关的数据
- 方法重写
* 如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖,也称为方法的重写。
- 实例变量
* 定义在方法中的变量,只作用于当前实例的类
- 封装
* 在类中对数据赋值、内部调用时对外部用户是透明的,使类变成一个容器,其中包含着类的数据和方法
- 继承
* 一个类派生出子类
* 在父类里定义的属性、方法被子类继承
- 多态
* 一个接口, 多种实现
* 基类中派生出不同子类, 且每个子类继承同样的方法名和同事对父类方法进行不同的实现
* 编程是对具体对象继续抽象的过程
* 多态是抽象画的表现形式
0x02 定义
- 定义
* 面向对象很重要的载体
* 类里面一般都是由多个函数组成,函数第一个参数默认是self
* 若需要全局变量,在类的内部直接定义
* 类的内部在调用函数或调用变量时,必须使用self.[变量/函数]
* self代表类实例化后的个体
class StuentName(object):
pass
- 原则
* 重复代码降低水平,消耗资源
* 可读性好、以扩张(经常变更)
- 类定义
```
class Pople(object): # 定义类
age = 15 # 类变量
def init(self, name, sex, age): # 构造函数,初始化
# 构造函数: 实例化时对类进行初始化
self.name = name # 实例变量(静态属性),赋值给实例
self.sex = sex
self.age = age
def bulk(self): # 类方法,功能(动态属性)
print(" {0}: wang wang wang!".format(self.name))
# 实例化: 把一个类变成具体对象的过程
d1 = Dog("Robin") # 实例化并传参(初始化类)
d2 = Dog("Jone")
d1.bulk() # 调用类方法
d2.bulk()
```
0x03 类实例化
- 类实例化
* 实例化类的首字母小写作为实例,然后实例化类
- 类的定义及调用方式
class Stuent(object): name = "Chow" def hello(self): print("Hello {0}".format(self.name)) # 调用变量,self.变量名 def python(self): self.hello() # 调用函数,self.函数 print("This is test.")
- 实例化类
studentName = Stuent();
- 类的构造器
* 类在初始化时,首先、必须要执行的函数
- 类的构造(实例化类)
class Status(object): def __init__(self, name): self.name = name print("init class Status") def hello(self): print("Hello {0}".format(self.name)) a = Status("Chow") # 实例化类 a.hello() # 调用类里面函数
0x04 继承与重写
- 继承
* 多继承时, 若父类中都有相同方法。谁在前,即使用最前方法
- 重写
* 调用时, 先去找子类中方法,若子类中找不到对应方法,则取父类中查找
- 继承及重写
```
class Animal(object): # 动物类, 父类
def init(self, name):
print("现在正在初始化一个Animal类.")
def run(self):
print("Animal can run.")
class Bird(Animal): # 鸟,子类,继承Animal类属性
def init(self):
print("鸟猫,Fly Fly Fly")
def fly(self):
print("Bird can fly.")
class Cat(Animal): # 猫, 继承Animal类,并进行重写
def init(self, name, sex):
self.name = name
self.sex = sex
super(Cat, self).init(self.name) # 继承类并进行传参
print("一只猫,miao miao miao")
def jiao(self):
print("miao miao miao.")
def run(self): # 继承父类,并重写父类函数
print("一只猫, 会上树来会跑路.")
class BianYi(Cat, Bird): # 变异类
pass
# animal = Animal() # 实例化
# cat = Cat("mao", "man") # 实例化
# cat.run() # 调用方法
bianyi = BianYi()
```