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)
类的多态

 





posted on 2017-08-14 19:31  clv  阅读(185)  评论(0编辑  收藏  举报

导航