当前位置 : 主页 > 手机开发 > 其它 >

17面向对象--三大特性

来源:互联网 收集:自由互联 发布时间:2021-06-19
python的三个特性:封装、继承、多态 封装: 将相关功能封装到一个类 将数据封装到一个对象(__init__) # 1、功能的封装 class Loy2: def testmethod1(self, name, data, gender): data = ‘ %s%s%stest1 ‘

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

网友评论