• python面向对象


    一、封装


    #面向对象:封装
    class Person:
    def __init__(self,name,age):
    """
    构造函数,类被调用的时候自动被执行。可以用来封装各种通用的参数等.
    self:调用方法的调用者的对象是谁就是谁
    """
    self.name = name
    self.age = age
    self.gender = "man"
    def show(self):
    print("He is %s ,age: %s" %(self.name,self.age))

    p1=Person("xiaofan",20)
    p1.show()

    二、继承

    #面向对象:继承
    class F: #父类,基类
    def f1(self):
    print('F.f1 . self: %s' %self) # 调用父类要给他传self ,要么自动传,要么手动传
    def f2(self):
    print('F.f2')

    class S(F): # 子类 ,派生类 ,继承自 F 。 先在自己的类中找,没有再去父类中找
    def s1(self):
    print('S.s1')
    def f2(self): #重写
    pass
    def f3(self):
    super(S,self).f2()
    #方法1:执行父类中的f2方法 。 super(子类名,调用者self)
    F.f2(self)
    # 方法2:执行父类中的f2方法 。执行对象self自动创建,执行分类方法要自己给他传self
    print('S.f3')
    a = S()
    a.s1()
    a.f1() # 执行父类方法
    a.f2()
    a.f3()

    # python多继承:
    # 当父类中有相同的方法时,继承顺序优先级从左到右,找到则停止
    # 继承关系: a -> b -> c , a -> d
    # 继承顺序: 从左(左边的所有)-->右
    # 继承关系:a -> b -> c -> z , a -> d -> e -> z
    # 继承顺序:从左(最上面的z,不找)-->右 --> 最后才找z


    #多继承:
    class BaseReuqest:
    def __init__(self):
    print('BaseReuqest.init')
    class RequestHandler(BaseReuqest):
    def __init__(self):
    print('RequestHandler.init')
    BaseReuqest.__init__(self)
    def serve_forever(self):
    print('RequestHandler.serve_forever')
    self.process_request()
    #此处会调用哪个process_request()呢
    # self,是obj , obj== 调用者 。 那么肯定是执行Minx中的process_request()的
    # 注意看 self 是哪个类的对象,然后回到那里去找
    def process_request(self):
    print('RequestHandler.process_request')
    class Minx:
    def process_request(self):
    print('minx.process_request')
    class Son(Minx, RequestHandler):
    pass
    obj=Son()
    # 实例化Son的对象,Son()继承Minx,和RequestHandler。
    # 执行 RequestHandler的初始化方法
    obj.serve_forever()
    # 执行RequestHandler父类BaseReuqest的初始化方法
    # 执行RequestHandler的server_forever()
    # 执行 Minx的process_request() 方法

    三、多态

    #多态:传入的参数不同类型执行的方法不一样
    #在python中不需要考虑多态,python原生就是多态的
  • 相关阅读:
    远程桌面连接win10问题解决
    为什么n各节点的的二叉链表中有n+1个空链域
    西门子Step7找不到有效授权的解决方法
    表达式树获取函数命名
    逆波兰表达式
    双向循环链表实践
    快速找到未知长度单链表的中间节点
    java的ArrayList(线性表)和LinkedList(双向链表)的深入学习
    23种设计模式中的访问者模式
    23种设计模式中的原型模式
  • 原文地址:https://www.cnblogs.com/fanxuanhui-linux/p/7782747.html
Copyright © 2020-2023  润新知