Python面向对象三大特征

Python面向对象三大特征

面向对象的三大特征:封装继承多态

一、封装

  • 广义的封装:函数的定义和类的定义
  • 狭义的封装:一个类中的某些属性,如果不希望被外界直接访问,则可以将该属性私有化,该属性只能在当前类中被直接访问;如果在类的外面需要访问(即获取或修改),则可以通过暴露给外界的函数间接访问
  • 封装的本质:将类中的属性进行私有化

1.1 私有属性

以实例属性为例,类属性一样,私有化只要在类属性前面添加两个下划线_

  • 公有属性

    正常使用self.变量 = 值定义,可以在类的外面直接用对象进行访问到

# 定义类
class Person1():
    def __init__(self, name, age):
        # 公开属性
        self.name = name
        self.age = age


# 创建对象
p1 = Person1("张三", 10)
# 通过对象可以直接访问
print(p1.name, p1.age)
  • 私有属性

    在定义属性的时候,在前面添加两个下划线_,如上诉的name修改为__name

    • 注意
      • 此时变量名为__name,而不是原来的name
      • 进行限制属性动态绑定的时候,也要书写__xxx形式
      • 当前类中的函数中,可以通过 self.__xxxx访问
      • 类的外面直接用对象无法访问
# b.私有属性/属性的私有化
class Person2():
    # 注意事项:哪怕是定义了私有属性,进行了限制属性动态绑定的时候,也要书写__xxx形式
    __slots__ = ("__name", "__age")

    def __init__(self, name, age):
        # 私有属性,只需要在属性名的前面添加两个下划线__
        self.__name = name
        self.__age = age

    # 注意3:在当前类中的函数中,可以self.__xxx访问的
    def show(self):
        print(f"姓名:{
     self.__name},年龄:{
     self.__age}")


# 创建对象,通过对象可以直接访问
p2 = Person2("张三", 10)
# 通过对象无法直接访问
# print(p2.__name, p2.__age)  # 报错:AttributeError: 'Person2' object has no attribute 'name'
p2.show(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

巧克力配酸奶

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值