【Python入门基础】面向对象的三大特性

封装

封装是使用特殊的语法,对成员属性和成员方法进行包装,达到保护和隐藏的目的,但不能把成员全部封装死,就失去了意义。被封装的成员主要是供类的内部使用,被特殊语法封装的成员会有不同的访问的权限。

  • 封装的实现
公有的封装:
    默认定义的成员都属于公有成员,公有成员可以在任何位置进行访问和操作;

受保护的封装:
    在成员名称前面加一个下划线_成员名称(Python没有具体实现,是约定俗成的),受保护的成员和公有成员一样可以在任何位置进行访问,但是一般不要随便访问和操作受保护成员;

私有的封装:
    在成员名称前面加两个下划线__成员名称,私有的成员只能在当前类的内部去操作和访问,不能在类的外部进行操作。

说明:在Python中并没有受保护的封装,属于开发者的约定俗成,私有化封装是通过改名策略实现的,并不是真正的私有化。

继承

在已有类的基础上创建新类,让一个类从另一个类中将属性和方法继承下来,提高代码的重用性,建立新的类与类的关系,方便其他逻辑的操作。提供继承信息的称之为父类,也称为超类或基类;得到继承信息的称之为子类,也称为派生类或衍生类。子类除了继承父类提供的属性和方法,还可以定义自己特有的属性和方法,所以子类比父类拥有更多的能力。

多态

子类在继承父类的方法后,可以对父类已有的方法给出新的实现版本,这个动作称之为方法重写(override)。通过方法重写可以让父类的同一行为在子类中拥有不同的实现版本,当调用这个经过子类重写的方法时,不同的子类对象会表现出不同的行为,这就是多态。

from abc import ABCMeta, abstractmethod


class Pet(object, metaclass=ABCMeta):
    """宠物"""

    def __init__(self, nickname):
        self._nickname = nickname

    @abstractmethod
    def make_voice(self):
        """发出声音"""
        pass


class Dog(Pet):
    """狗"""

    def make_voice(self):
        print('%s: 汪汪汪...' % self._nickname)


class Cat(Pet):
    """猫"""

    def make_voice(self):
        print('%s: 喵...喵...' % self._nickname)


def main():
    pets = [Dog('旺财'), Cat('凯蒂'), Dog('大黄')]
    for pet in pets:
        pet.make_voice()


if __name__ == '__main__':
    main()

说明:‘Pet’类是一个抽象类,抽象类就是不能创建对象的类,这种类的存在就是专门为了让其他类来继承它。Python从语法层面并没有像Java或C#那样提供对抽象类的支持,但是我们可以通过'abc'模块的‘ABCMeta’元类和‘abstractmethod’包装器来达到抽象类的效果,如果一个类中存在抽象方法,那么这个类不能够实例化(创建对象)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZoomToday

给作者倒一杯卡布奇诺

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值