• Python——面向对象(初级篇)


    1.如何创建类

    class 类名:
        pass

    2.如何创建方法

    构造方法:
        __init__
    obj = 类名('a1')
    
    普通方法:
    obj = 类名('xxx')
    obj.普通方法名()

    3.图解面向对象的创建和执行

    4.面向对象三大特性之一:封装

    '''定义'''
    class Bar:
        def __init__(self,name,age):
            self.n = name
            self.a = age
    
    '''执行'''
    b1 = Bar('admin',26)
    b2 = Bar('qq',48)

      4.1 普通方法与构造方法对比:

     

    5.面向对象三大特性之二:继承

    #*****创建父系类******
    class Beast:    #动物的功能
        def eat(self):
            print(' %s吃'%(self.name))
        def drink(self):
            print(' %s喝'%(self.name))
        def shit(self):
            print(' %s拉'%(self.name))
        def pee(self):
            print(' %s撒' % (self.name))
    
    #********创建猫的 类******
    class Cat(Beast):   #猫继承动物的功能
        def __init__(self,name):
            self.name = name
            self.breed = ''
        def fig(self):
            print('%s
    '%(self.name),'喵喵叫')
    
    #******* 创建狗的 类********
    class Dog(Beast):   #狗继承动物的功能
        def __init__(self,name):
            self.name = name
            self.breed = ''
        def fig(self):
            print('%s
    '%(self.name),'汪汪叫')
    
    
    '''执行'''
    
    '''猫的部分功能执行'''
    a = Cat('')
    a.fig()
    a.eat()
    
    
    '''狗的部分功能执行'''
    b =  Dog('')
    b.fig()
    b.drink()

     6.面向对象三大特性三:多态继承

       6.1 多态继承案列一:

     1 class F_0:
     2     def a(self):
     3         print('F_0.a')
     4 class F0(F_0):
     5     def a1(self):
     6         print('F0.a')
     7 
     8 class F1(F0):
     9     def a1(self):
    10         print('F1.a')
    11 
    12 class F2():
    13     def a(self):
    14         print('F2.a')
    15 
    16 class S(F1,F2):
    17     pass
    18 
    19 #*****执行*****
    20 
    21 obj = S()
    22 obj.a()     # F_0.a

      过程:对象obj 现在F1中找a(),F1中没有,在F1的父系(F0)中找,如果F0中没有,再去F0的父系(F_0)中找,如果有,就打印,不在去F2中找,如果没有,就去F2中找。执行过程:左侧优先,一条道走到黑。具体如图展示:

      6.2 多态继承案列二:(两个类有交集的类)

     1 class Base:
     2     def a2(self):
     3         print('Base.a')
     4 class F0(Base):
     5     def a1(self):
     6         print('F0.a')
     7 
     8 class F1(F0):
     9     def a1(self):
    10         print('F1.a')
    11 
    12 class F2(Base):
    13     def a(self):
    14         print('F2.a')
    15 
    16 class S(F1,F2):
    17     pass
    18 
    19 obj = S()
    20 obj.a()    # F2.a
    21 obj.a2()   #Base.a

      Base 类是类F1和F2的交集。过程:对象obj 现在F1中找a(),F1中没有,在F1的父系(F0)中找,如果F0中没有;开始从F2中找,F2中没有就去F2的父系(Base)中找。

    结论:Base 如果是两个类的交集,那么执行过程是先执行左边的,再执行右边的,从右边执行过程中打印。如图所示:

       6.3 多态继承案列三:

     1 class BaseReuquest():
     2     pass
     3 
     4 class RequestHandler(BaseReuquest):
     5     def serve_forever(self):
     6         #self 是obj
     7         print('RequestHandler.serve_forever')
     8         self.process_request()
     9     def process_request(self):
    10         print('RequestHandler.process_request')
    11 
    12 class Minx:
    13     def process_request(self):
    14         print('Minx.process_request')
    15 
    16 
    17 class Son(Minx,RequestHandler):
    18     pass
    19 
    20 obj = Son()
    21 obj.serve_forever()

      过程: 创建4个类,执行obj.serve_forever()语句,根据左侧优先,先执行 类 Minx ,没有就执行右侧的 类 RequestHandler ,在类 RequestHandler 中找server_forever()方法执行,这时候会打印 print('RequestHandler.serve_forever');由于方法里面有self.process_request(),故而会执行 类 Minx 中 process_request() 的方法。原因是 self 是对象 obj ,所以:self.process_request() 也就是obj.process_request(),根据左侧优先,所以会现在 类Minx 中找process_request() 方法。如图所示:

     

  • 相关阅读:
    单例模式
    关于static
    在O(1)时间复杂度删除链表节点
    奇偶分割数组
    用栈实现队列
    前序遍历和中序遍历树构造二叉树
    扇贝每日一句_1006
    寻找旋转排序数组中的最小值
    翻转链表
    扇贝每日一句_1002
  • 原文地址:https://www.cnblogs.com/xp0919/p/9789910.html
Copyright © 2020-2023  润新知