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基础三大特性的了解。如有问题,欢迎指正。

    

posted @ 2019-07-21 02:12  John.Liu-  阅读(145)  评论(0编辑  收藏  举报