python---类
面向过程
一个面向过程的程序是一步步执行程序的模块,代码,模块代码之间有很强的关联性
面向对象
类,对象
类的特点:
继承,封装,多态
对象:
类实例化后的对象
多态:一种接口,多种形态
把一个类变成一个具体的对象的过程叫实例化
类变量的用途:
实例公用的变量,节省内存
类
属性
实例变量
类变量
私有属性
方法
构造方法,初始化实例化使用
析构函数
继承:
单继承
多继承
组合(即在构造函数中一个类中直接调用另一个类)
析构函数
在实例释放、销毁的时候自动执行的,通常用于做一些收尾工作,如关闭一些数据库连接打开的临时文件
私有方法、私有属性
只有自己能够访问
广度优先和深度优先
广度优先是同一层次的优先处理
深度优先是将第一个进行深度处理
python 2 中,经典类是按着深度优先来继承,新式类是按广度优先来继承的
python 3 中,经典类和新式类都是统一按广度优先来继承的
类的初步实现:
1 # -*- coding:utf-8 -*- 2 # LC 3 4 5 class Role: 6 number = 123 #类变量 7 test_list = [] 8 def __init__(self,name,role,weapon,life_value=100,money=15000): 9 #构造函数 10 #在实例化时做一些类的初始化工作 11 self.name = name #实例变量(静态属性),作用域就是实例本身 12 self.role = role 13 self.weapon = weapon 14 self.__life_value = life_value #私有属性 15 self.money = money 16 def show_status(self): 17 print("%s life value is %s"%(self.name,self.__life_value)) #通过调用类的函数进行查看私有属性 18 def __show(self): #私有方法,加两个_ 19 pass 20 21 def __del__(self): 22 #析构函数 23 print("%s is die!!!"%self.name) 24 25 def shot(self):#类的方法、功能,(动态属性) 26 print("%s shoting..."%self.name) 27 28 def got_shot(self): 29 print("%s got shoting"%self.name) 30 31 def find_role(self): 32 print("%s role is %s"%(self.name,self.role)) 33 34 def buy_gun(self,gun_name): 35 print("%s is buying %s"%(self.name,gun_name)) 36 #类实例化 37 38 r1 = Role("LC","Terrorist","AK47") #实例化,生成一个角色,又叫做Role这个类的实例 39 r1.shot() 40 r1.buy_gun("M4A1") 41 r2 = Role("xm","good guy","m4a1") 42 #实例变量优先于类变量 43 44 r1.bullet_prove = True #可新增实例变量 45 r1.name = "hell" #修改实例变量 46 del r1.name #删除实例变量 47 48 r1.number = "改类变量" #改变r1的类变量,只对r1有效 49 50 #私有属性查看方法 51 r1.show_status() 52 53 r1.test_list.append("from r1") 54 r2.test_list.append("from r2") 55 56 57 print(r1.name,r1.number)
类的继承
1 #class People: 经典类 2 #class People(object): 新式类 3 4 class People(object): 5 6 def __init__(self,name,age,): 7 self.name = name 8 self.age = age 9 10 def eat(self): 11 print("%s is eating"%self.name) 12 13 def sleep(self): 14 print("%s is sleeping"%self.name) 15 16 def talk(self): 17 print("%s is talking"%self.name) 18 19 class Relation(object): #新式类 20 def make_friends(self,obj): 21 print("%s is trying to make friends with %s"%(self.name,obj.name)) 22 23 class Man(People,Relation): #继承父类,多继承 24 def __init__(self,name,age,money): #对构造函数进行重构 25 People.__init__(self,name,age) #继承父类的参数继承 26 #super(Man,self).__init__(name,age) 继承父类的构造函数,与People.__init__(self,name,age)一样,新式类写法 27 self.money = money 28 print("%s born with %s money"%(self.name,self.money)) 29 30 def piao(self): 31 print("%s is piaoing"%self.name) 32 33 def sleep(self): #更新,重构父类方法 34 People.sleep(self) 35 print("man sleeping ,update") 36 37 class Women(People,Relation): #多继承,多继承在实例在实例化过程中,查找构造函数的时候,先从本类找,如果没有,再从父类找,多继承的话,从继承的父类按左至右找 38 39 def get_birth(self): 40 print("birth") 41 42 m1 = Man("LC",16,100) 43 m1.eat() 44 45 w1 = Women("Pxm",11) 46 47 m1.make_friends(w1)
类的多态
1 class Animal(object): 2 def __init__(self,name): 3 self.name = name 4 @staticmethod #使用装饰器配合实现 5 def animal_talk(obj): # 多态的实现方式,一种接口,多种形态 6 obj.talk() 7 8 class Dog(Animal): 9 def talk(self): 10 print("%s is Wooling"%self.name) 11 12 class Cat(Animal): 13 def talk(self): 14 print("%s is Mewing"%self.name) 15 16 D1 = Dog("dog1") 17 C1 = Cat("cat1") 18 19 D1.talk() 20 C1.talk() 21 22 def animal_talk(obj): #多态的实现方式,一种接口,多种形态 23 obj.talk() 24 25 animal_talk(D1) 26 animal_talk(C1) 27 28 Animal.animal_talk(D1) 29 Animal.animal_talk(C1)