看完这篇文章,你的Python基础就差不多了( 六 )

class Cat:def __init__(self, name):print("初始化方法 %s" % name)self.name = name...tom = Cat("Tom")...lazy_cat = Cat("大懒猫")...2.5 私有属性和私有方法应用场景

  • 在实际开发中 , 对象 的 某些属性或方法 可能只希望 在对象的内部被使用 , 而 不希望在外部被访问到
  • 私有属性 就是 对象 不希望公开的 属性
  • 私有方法 就是 对象 不希望公开的 方法
定义方式
  • 在 定义属性或方法时 , 在 属性名或者方法名前 增加 两个下划线 , 定义的就是 私有属性或方法:

看完这篇文章,你的Python基础就差不多了

文章插图
 
私有属性和私有方法
伪私有属性和私有方法Python 中 , 并没有 真正意义 的 私有在给 属性、方法 命名时 , 实际是对名称做了一些特殊处理 , 使得外界无法访问到处理方式:在 名称 前面加上_类名 => _类名__名称
# 私有属性 , 外部不能直接访问到print(xiaofang._Women__age)# 私有方法 , 外部不能直接调用xiaofang._Women__secret()
提示:在日常开发中 , 不要使用这种方式 , 访问对象的 私有属性 或 私有方法 。
3. 封装、继承和多态面向对象三大特性:
  1. 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中
  2. 继承 实现代码的重用 , 相同的代码不需要重复的编写
  3. 多态 不同的对象调用相同的方法 , 产生不同的执行结果 , 增加代码的灵活度
3.1 继承3.1.1 单继承继承的概念:子类 拥有 父类 以及 父类的父类 中封装的所有 属性 和 方法 。
class 类名(父类名):pass当 父类 的方法实现不能满足子类需求时 , 可以对方法进行重写(override)重写 父类方法有两种情况:
  1. 覆盖 父类的方法:父类的方法实现 和 子类的方法实现完全不同
    具体的实现方式 , 就相当于在 子类中 定义了一个 和父类同名的方法并且实现 。
  2. 对父类方法进行 扩展:子类的方法实现 中 包含 父类的方法实现
    在子类中 重写 父类的方法;在需要的位置使用 super().父类方法 来调用父类方法的执行代码;其他的位置针对子类的需求 , 编写 子类特有的代码实现 。
关于 super
  • 在 Python 中 super 是一个 特殊的类
  • super()就是使用 super 类创建出来的对象
  • 最常 使用的场景就是在 重写父类方法时 , 调用 在父类中封装的方法实现
调用父类方法的另外一种方式:在 Python 2.x 时 , 如果需要调用父类的方法 , 还可以使用以下方式:父类名.方法(self) 。目前在 Python 3.x 还支持这种方式 , 但不推荐使用 , 因为一旦 父类发生变化 , 方法调用位置的 类名 同样需要修改 。
父类的 私有属性 和 私有方法子类对象 不能 在自己的方法内部 , 直接 访问 父类的 私有属性 或 私有方法子类对象 可以通过 父类 的 公有方法 间接 访问到 私有属性 或 私有方法
私有属性、方法 是对象的隐私 , 不对外公开 , 外界 以及 子类 都不能直接访问 私有属性、方法 通常用于做一些内部的事情
3.1.2 多继承子类 可以拥有 多个父类 , 并且具有 所有父类 的 属性 和 方法 , 例如:孩子 会继承自己 父亲 和 母亲 的 特性 。
class 子类名(父类名1, 父类名2...):passPython 中的 MRO算法(Method Resolution Order)