1、面向对象介绍:
世界万物,皆可分类
世界万物,皆为对象
只要是对象,就肯定属于某种类
只要是对象,就肯定有属性
2、 面向对象的几个特性:
class类:
一个类即对一类拥有相同属性的对象的抽象,蓝图、原型。在这个类中定义了这些对象都具备的属性,共同的方法。
object对象:
一个对象即是一个类的实例化,一个类必须经过实例化之后才能在程序中调用
三大特性:封装、继承和多态
封装:在类中对数据的赋值,内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法
继承:一个类可以派生出子类,在这个父类里定义的属性,方法自动被子类继承
多态:
多态是面向对象的重要特性,简单说:一个接口,多种实现,只一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时对父类的方法做了不同的体现买这就是同一种事物表现出的多种形态
例子:老板说开始工作,不需要单独对公司的不同部门
如对商务部门说开始工作,对技术部门说开始工作…而是只需要说一句开始工作,这样各个部门就开始工作这就是一种多态的体现
多态允许将子类的对象当做父类的对象使用,某父类的引用指向其子类型的对象,调用的方法是该子类型的方法
3、面向对象编程OOP
无论是面向对象还是面向过程编程,或者其他方式编程,都要明确记住以下原则:
a. 写重复代码是非常不好的低级行为
b. 你写的代码需要经常变更
开发正规的程序跟那种写个运行一次就扔了的脚本有很大的不同,你的代码总是需要不断的更改,不是修改bug就是添加新功能等,所以为了日后方便程序的修改及扩展,你写的代码一定要遵循易读、易改的原则(可读性好、易扩展)
首先是一个简单的例子:用于理解面向对象
1 class Dog:
2 def bulk(self):
3 print("小A:wangwangwang....")
4 d1 = Dog()
5 d2 = Dog()
6 d3 = Dog()
7 d1.bulk()
8 d2.bulk()
9 d3.bulk()
运行结果如下:
1 D:\python35\python.exe D:/python培训/s14/day6/dog.py 2 小A:wangwangwang.... 3 小A:wangwangwang.... 4 小A:wangwangwang....
从运行结果也发现三个小狗都在叫了,但是显示都是小A,如何让传入不同的值,体现让不懂的小狗在叫:
代码例子如下:
1 class Dog:
2 def __init__(self,name):
3 self.name = name
4
5 def bulk(self):
6 print("%s:wangwangwang...." %self.name)
7 d1 = Dog("小A")
8 d2 = Dog("小B")
9 d3 = Dog("小C")
10 d1.bulk()
11 d2.bulk()
12 d3.bulk()
运行结果如下:
1 D:\python35\python.exe D:/python培训/s14/day6/dog.py 2 小A:wangwangwang.... 3 小B:wangwangwang.... 4 小C:wangwangwang....
下面从经常玩的cs中人物角色中体现:
角色很简单,就俩个,恐怖份子、警察,他们除了角色不同,其它基本都 一样,每个人都有生命值、武器等。如果不用OPP面向对象编程,方法如下:
1 #role 1
2 name = 'Dean'
3 role = 'terrorist'
4 weapon = 'AK47'
5 life_value = 100
6
7 #rolw 2
8 name2 = 'Jack'
9 role2 = 'police'
10 weapon2 = 'B22'
11 life_value2 = 100
上面定义了一个恐怖分子Dean和一个警察jack,但是只有2个人肯定不行,我们再建一个恐怖分子和警察
1 #role 1
2 name = 'Alex'
3 role = 'terrorist'
4 weapon = 'AK47'
5 life_value = 100
6 money = 10000
7
8 #rolw 2
9 name2 = 'Jack'
10 role2 = 'police'
11 weapon2 = 'B22'
12 life_value2 = 100
13 money2 = 10000
14
15 #role 3
16 name3 = 'Rain'
17 role3 = 'terrorist'
18 weapon3 = 'C33'
19 life_value3 = 100
20 money3 = 10000
21
22 #rolw 4
23 name4 = 'Eric'
24 role4 = 'police'
25 weapon4 = 'B51'
26 life_value4 = 100
27 money4 = 10000
4个角色虽然创建好了,但是有个问题就是,每创建一个角色,我都要单独命名,name1,name2,name3,name4…,后面的调用的时候这个变量名你还都得记着,要是再让多加几个角色,估计调用时就很容易弄混啦,所以我们想一想,能否所有的角色的变量名都是一样的,但调用的时候又能区分开分别是谁?
当然可以,我们只需要把上面的变量改成字典的格式就可以啦。
1 roles = {
2 1:{'name':'Alex',
3 'role':'terrorist',
4 'weapon':'AK47',
5 'life_value': 100,
6 'money': 15000,
7 },
8 2:{'name'