Python基础学习第八天

Python 私有属性、单继承和方法重写

1. 私有属性和方法

  • 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到
  • 私有属性 就是 对象 不希望公开的 属性
  • 私有方法 就是 对象 不希望公开的 方法
  • 在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是 私有 属性或方法
设置私有属性之前:
class Girl:
    def __init__(self, name):
        self.name = name
        self.age = 18
    def secret(self):
        print("{}的年龄是{}岁".format(self.name, self.age))
Anna = Girl("小美")
Anna.secret()
print("小美")
print(Anna.age)  # 可以从外部访问属性
私有属性在外界不能被直接访问:
class Girl:
    def __init__(self, name):
        self.name = name
        self.__age = 18  # 将 age 设置成私有属性
    def secret(self):
        print("{}的年龄是{}岁".format(self.name, self.__age))
Anna = Girl("小美")
Anna.secret()
print(Anna)
# 私有属性,不能被外界访问!
print(Anna.__age) 
"""
程序运行结果:
AttributeError: 'Girl' object has no attribute '__age'
"""
私有方法,在外界不能直接被调用
class Girl:
    # 定义属性
    def __init__(self, name):
        self.__name1 = name
        self.__age = 18  # 如果希望属性不能在 外部被调用,可以定义该属性为私有 属性

    def __secret(self):  # 如果希望方法不能在外部被调用,可以定义该方法为 私有方法
        print(f"{
     self.__name1}的年龄是{
     self.__age}")
xiaomei = Girl("小美")
""" 对象不能在类的外部 访问私有属性 调用私有方法
print(xiaomei.__age)  # 对象访问属性
xiaomei.__secret()  # 对象调用方法
"""
""""
程序运行结果:
AttributeError: 'Girl' object has no attribute '__secret'
"""

2. 伪 私有属性和私有方法

Python 中,并没有 真正意义 的 私有
在给 属性、方法 命名时,实际是对 名称 做了一些特殊处理,使得外界无法访问
处理方式: 在 名称 前面加上 _类名 --> _类名__名称

提示:在日常开发中,不要使用这种方式,访问对象的 私有属性 或 私有方法

Anna = Girl("小美")
Anna._Girl__secret()
print(Anna._Girl__age)
print(Anna)

3. 继承

面向对象三大特性

  1. 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中
  2. 继承 实现代码的重用,相同的代码不需要重复的编写
  3. 多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度

3.1 继承的概念

子类 拥有 父类 的所有 方法 和 属性
在这里插入图片描述

class Animal:
    def __init__(self):
        self.color = "grey"
    def eat(self):  #
        print("eat")
    def drink(self):
        print("drink")
    def run(self):
        print("run")
    def sleep(self):
        print("sleep")
# 创建 Dog 类,继承自 Animal类
class Dog(Animal):
    def bark(self):
        print("旺旺")
# 根据 Dog 类 创建对象
wangcai = Dog()
print(wangcai.color)  # 子类对象 能够 访问 父类 封装的 属性
wangcai.bark()  # 子类,可以根据自己的需求,来单独开发自己的 方法
# 子类对象,能够访问 父类 封装的方法
wangcai.eat()
wangcai.drink()
wangcai.run()
wangcai.sleep()
class XTQuan(Dog):
    def fly(self):
        print(" i can fly....")
xtdog = XTQuan()
xtdog.fly()
xtdog.bark()
xtdog.eat()
xtdog.sleep()

3.2 继承的语法

class 子类名(父类名):
pass
子类 继承自 父类,可以直接 享受 父类中已经封装好的方法,不需要再次开发
子类 中应该根据 职责,封装 子类特有的 属性 和 方法

专业术语
Dog 类 是 Animal 类的 子类,Animal 类是 Dog 类的 父类,Dog 类从Animal 类 继承
Dog 类 是 Animal 类的 派生类,Animal 类是 Dog 类的 基类,Dog 类从Animal 类 派生

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值