
正文
python(6)-类
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数
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属性中
self 是一个形式参数,当执行obj = Foo(‘terry’, 20) 时,self等于obj, 内容被封装到了obj中,每个对象中都有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)







