• 17面向对象--三大特性


    python的三个特性:封装、继承、多态

      封装:

        将相关功能封装到一个类

        将数据封装到一个对象(__init__)

    # 1、功能的封装
    
    class Loy2:
    
        def testmethod1(self, name, data, gender):
            data = '%s%s%stest1' % (name, data, gender)
            print(data)
    
        def testmethod2(self, name, data, gender):
            data = '%s%s%stest2' % (name, data, gender)
            print(data)
    
        def testmethod3(self, name, data, gender):
            data = '%s%s%stest3' % (name, data, gender)
            print(data)
    
    
    obj1 = Loy2()
    obj1.testmethod1('别人', '明天', '上班')
    obj1.testmethod2('别人', '明天', '上班')
    obj1.testmethod3('别人', '明天', '上班')
    
    
    # 2、优化版本(参数的打包)
    class Loy:
    
        def __init__(self, a, b, c):
            self.n1 = a
            self.n2 = b
            self.n3 = c
    
        def testmethod1(self):
            data = '%s%s%stest1' % (self.n1, self.n2, self.n3)
            print(data)
    
        def testmethod2(self):
            data = '%s%s%stest2' % (self.n1, self.n2, self.n3)
            print(data)
    
        def testmethod3(self):
            data = '%s%s%stest3' % (self.n1, self.n2, self.n3)
            print(data)
    
    
    obj = Loy('我自己', '今天', '去打牌')
    obj.testmethod1()
    obj.testmethod2()
    obj.testmethod3()

      继承:

        继承的目的是为了复用

        多继承:

          不同于其他语言,在python中,一个派生类可以继承多个基类,多继承(先找左,再找右),多继承可以提高复用性

    class Base1:
        def f1(self):
            print('base1.f1')
        def f2(self):
            print('base1.f2')
    
    
    class Base2:
        def f1(self):
            print('base2.f1')
        def f2(self):
            print('base2.f2')
        def f3(self):
            print('base2.f3')
            self.f1()
    
    class Foo(Base1, Base2):
        def f0(self):
            print('foo.f0')
            self.f3()
    
    
    obj = Foo()
    obj.f0()

          以上代码打印结果为

          

          当运行obj对象的f0方法时,首先在本身的Foo类中寻找f0打印第一行。然后f0中调用了f3,f3在Foo类中没有,然后在继承

        的Base1类中找f3,没找到。然后在Base2类中找f3。打印第二行。然后f3调用了f1(注意:此时self.f3()中的self指向依旧是obj)。

        然后Foo类中没有找到f1,然后在Base1类中找到,打印第三行,至此结束。

          

      多态:

        # 关于多态,网上的说法众说纷纭,Google了半天。发现大佬们说的都过于抽象。鉴于我自己还不是个老油条。后续醍醐灌顶之后再补充。

        多种形态或者多种状态,多态可以增加代码的灵活度。

        鸭子模型:在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的

        

    class Base(object):
        def fun(self):
            print('这是一个基类')
    
    
    class Foo(Base):
        def fun(self):
            Base.fun(self)
            print('这是派生类1')
    
    
    class Foo2(Base):
        def fun(self):
            Base.fun(self)
            print('这是派生类2')
    
    
    a = Base()
    b = Foo()
    c = Foo2()
    
    a.fun()
    b.fun()
    c.fun()
    
    '''
    打印结果如下:
    这是一个基类
    这是一个基类
    这是派生类1
    这是一个基类
    这是派生类2
    '''

        以上就是个人对于python基础三大特性的了解。如有问题,欢迎指正。

        

  • 相关阅读:
    [Keyence Programming Contest 2020 E] Bichromization
    [Gym101821B] LIS vs. LDS
    [Ynoi2010]iepsmCmq【数据结构】
    【集训队作业2018】喂鸽子
    【集训队作业2018】复读机
    【NOI2015】荷马史诗
    【IOI2018】组合动作
    【清华集训2017】榕树之心
    【清华集训2016】Alice和Bob又在玩游戏
    1209F
  • 原文地址:https://www.cnblogs.com/cbslock/p/11220018.html
Copyright © 2020-2023  润新知