• 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)
  • 相关阅读:
    New-SAN-FENG-YUN-三
    San丰-Cloud
    SpringBoot+MySQL+MyBatis+Shiro+AdminLTE
    SanFeng-Clound
    SanFengClound
    传奇音乐设置
    热血传奇GOM引擎问题集锦
    app测试
    接口测试
    题目
  • 原文地址:https://www.cnblogs.com/huangxm/p/5311596.html
Copyright © 2020-2023  润新知