本节大纲:
特性:class、object
封装 继承 多态
语法\属性\方法
构造函数\析构函数
私有方法\私有属性
类变量\实例变量
一、面向对象特性
1、Class 类
2、Object 对象
3、Encapsulation 封装
在类中对数据的赋值、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法
4、Inheritance 继承
一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承
5、Polymorphism 多态
多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现出的多种形态。
二、OPP编程实例演示
class Role(object):
n = 123
name = "类name"
# 类变量
def __init__(self, name, role, weapon, life_value=100, money=15000):
# 构造函数
# 实例化时做一些类的初始化的工作
# r1.Role('Alex') ==>Role(r1,'Alex')
# self对应r1
# 实例变量(静态属性)
self.name = name
self.role = role
self.weapon = weapon
self.__life_value = life_value #私有属性
self.money = money
def __del__(self):
print("%s Game over..." %self.name)
# 类的方法(动态属性)
# r1.shot()==>Role.shot(r1)
def __shot(self):
print("shooting...")
def got_shot(self):
print("ah...,I got shot...")
def buy_gun(self, gun_name):
print("%s just bought %s" % (self.name, gun_name))
def show_life(self):
print("%s life_value is %s" %(self.name,self.__life_value))
r1 = Role('Alex', 'police', 'AK47') # 实例化(初始化类,生成一个角色)
r2 = Role('Jack', 'terrorist', 'B22') # 生成一个角色
print(Role.n)
print(r1.n,r1.name)
r1.buy_gun("AK47")
r1.show_life()
类变量的作用及析构函数
类变量的作用:大家共有的属性,节省开销
析构函数:在实例释放或销毁时自动执行,通常用于一些收尾工作
def __del__(self):
print("%s Game over..." %self.name)
私有方法,私有属性
self.__life_value = life_value #私有属性
def __shot(self): #私有方法
print("shooting...")
继承
经典类与新式类继承顺序
py2 经典类:深度优先 新式类:广度优先
py3 经典类新式类都是广度优先
继承实例
多态实例
一种接口,多种实现
class Animal(object):
def __init__(self, name): # Constructor of the class
self.name = name
def talk(self): # Abstract method, defined by convention only
raise NotImplementedError("Subclass must implement abstract method")
@staticmethod
def func(obj): # 一个接口,多种形态
obj.talk()
class Cat(Animal):
def talk(self):
print('%s: 喵喵喵!' % self.name)
class Dog(Animal):
def talk(self):
print('%s: 汪!汪!汪!' % self.name)
c1 = Cat('小晴')
d1 = Dog('李磊')
Animal.func(c1)
Animal.func(d1)