面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数
class Role(object): #创建类 def __init__(self, name, role, weapon, life_value): #构造函数 self.name = name self.role = role self.weapon = weapon self.life_val = life_value def buy_weapon(self, weapon): #类中每个方法的第一个参数必须是self print('%s is buying [%s]' % (self.name, weapon)) self.weapon = weapon p1 = Role('Jack', 'Police', 'Mp5', 100) #根据类创建对象 t1 = Role('cannor', 'Terrorist', 'Mp5', 100) p2 = Role('rain', 'Police', 'Mp5', 100) print(p1.weapon) print(t1.weapon) p1.buy_weapon('B42') #执行buy_weapon方法 t1.buy_weapon("AK47")
面向对象的三天特性:封装,继承 和 多态
一、封装:就是将内容封装到某个地方,以后再去调用被封装在某处的内容。
class Foo(object): def __init__(self, name, age): self.name = name self.age = age obj = Foo('Terry', 20) #将Terry和20分别封装在obj的name和age属性中 obj2 = Foo('kittly', 22) #将kittly和22分别封装在obj2的name和age属性中
二、继承: 子类可以继承父类的内容
例如: 猫可以: 喵喵叫,吃,喝,拉,撒
狗可以:汪汪叫,吃, 喝,拉,撒
class Animal(object): def eat(self): print('%s 吃' % sefl.name) def drink(self): print('%s 喝' % self.name) def shit(self): print('%s 拉' % self.name) def pee(self): print('%s 撒' % self.name) class Cat(Animal): def __init__(self, name): self.name = name self.breed = '猫' def cry(self): print('喵喵叫') class Dog(Animal): def __init__(self, name): self.name = name self.breed = '狗' def cry(self): print('汪汪叫')
python的类是可以多继承的,如果继承了多个类,那么其寻找方法有两种: 深度优先 和 广度优先
经典类: 多继承时,按照深度优先的方式查找
新式类:多继承时,按照广度优先方式查找
B和C继承A , D继承B和C:
执行D类方法时,首先在D类中查找,如果D类中没有,则去B类中查找,如果B类中没有,则继续去C类中查找,如果C类中也没有则去A类中查找,如果A类中也没有,就报错了。
经典类写法:
class C1: pass class C2(C1): pass
新式类的写法:
class N1(object): pass class N2(N1): pass
三、多态
python中没有多态,也用不到多态,python崇尚的是’鸭子类型‘:
class F1: pass class S1(F1): def show(self): print 'S1.show' class S2(F1): def show(self): print 'S2.show' def Func(obj): print obj.show() s1_obj = S1() Func(s1_obj) s2_obj = S2() Func(s2_obj)