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的类是可以多继承的,如果继承了多个类,那么其寻找方法有两种: 深度优先广度优先

image

 

经典类: 多继承时,按照深度优先的方式查找

新式类:多继承时,按照广度优先方式查找

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)
posted @ 2016-03-23 16:08  黄小墨  阅读(287)  评论(0编辑  收藏  举报