一木.溪桥学Python-12:面向对象编程、私有属性、实例属性、类属性、封装、继承、单继承、super()

本文介绍了Python面向对象编程的关键概念,包括私有属性、实例属性、类属性、封装、继承和单继承,以及super()函数的使用。通过实例解释了如何定义和访问私有属性,探讨了实例属性与类属性的选择,并详细讲解了类的成员、方法类型如实例方法、类方法和静态方法。最后,文章提到了继承的概念以及super()在调用父类方法中的应用。
摘要由CSDN通过智能技术生成

一木.溪桥 在Logic Education跟Amy学Python

逻辑教育 :https://logicedu.ke.qq.com

12期:Python基础课

一木.溪桥学Python-12:面向对象编程、私有属性、实例属性、类属性、封装、继承、单继承 、super()

日期:2021年1月11日


学习目标:

  • 私有属性
  • 类属性
  • 封装
  • 继承
  • 单继承
  • super()

学习内容:

私有属性

私有属性与私有方法介绍
  • 在实际开发中,对象的某些属性或者方法,只希望在对象的内部使用,这时,我
    们就可以使用私有属性和私有方法。
私有属性
  • 私有属性: 就是对象不希望公开的属性。

  • 定义方式: 在属性名前面增加两个下划线(例如:__name)

  • eg. 练习

    定义类为:"人"类
    创建对象:rose
    初始化对象属性:name 与 age
    要求:age 不能在类的外部访问

class People:
    def __init__(self, name, age):
        self.name = name
        # self.age = age
        self.__age = age

    def print_info(self):            # 1.私有属性在类的内部的方法当中是可以访问的
        print(self.__age)

    def get_age(self):               # 2.在类的内部将私有属性返回出来,进行访问
        return self.__age

    def set_age(self, new_age):      # 3.在类的外部对私有属性进行修改
        self.__age = new_age
        print(f"new age:{self.__age}")


zs = People("zs", 19)
print(zs.name)          # zs
# print(zs.age) # 在类的外部访问私有属性报错:AttributeError: 'People' object has no attribute 'age'

# 如何才能在类的外部访问私有属性?

zs.print_info()       # 1.私有属性在类的内部的方法当中是可以访问的  19
print(zs.get_age())   # 2.在类的内部将私有属性返回出来,进行访问    19
zs.set_age(50)        # 3.在类的外部对私有属性进行修改              new age:50

zs.print_info()         # 50
print(zs.get_age())     # 50
zs.set_age(30)          # new age:30

zs.print_info()         # 30
print(zs.get_age())     # 30
zs.set_age(20)          # new age:20
  • 需求:一定要在类的外部访问到对象的私有属性,如何实现?
  • 方法:
    • 可以通过类的内部的方法访问私有属性
    • 通过类的内部方法将私有属性返回出去
    • 在类的外部调用该方法并且接收
私有方法
  • 私有方法: 就是对象不希望公开的方法

  • 定义方式: 在方法名前面增加两个下划线(例如:__test)

  • 注意:

    在 python 中,并没有真正意义上的私有,只有伪私有。当我们在访问时,以对象 ._ 类名 __私有属性即可访问,私有方法同理。但是不建议使用。

class Demo:
    def test1(self):
        print("--1--")

    def __test2(self):
        print("--2--")

    def test3(self):
        return self.__test2()


d = Demo()

d.test1()          # --1--

# d.__test2()     # 私有方法没有办法直接在类的外部进行访问,报错:AttributeError: 'Demo' object has no attribute '__test2'

d.test3()         # 通过类的内部的方法去进行调用      # --2--

# d._Demo__test2()   # 注意:可以直接通过 对象._类名__私有方法名() 去访问私有方法,但是不建议使用

类的成员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值