Python面向对象的三大特性(封装)

Python面向对象的三大特性(封装)

1、面向对象有哪些特性

三种:封装性、继承性、多态性


2、Python中的封装

在Python代码中,封装有两层含义:

① 把现实世界中的主体中的属性和方法书写到类的里面的操作即为封装

class Person()
	# 封装属性
    # 封装方法

②封装可以为属性和方法添加为私有权限


3、封装中的私有属性和私有方法

在面向对象代码中,我们可以把属性和方法分为两大类:公有(属性、方法)、私有(属性、方法)

公有属性和公有方法:无论在类的内部还是在类的外部我们都可以对属性和方法进行操作。

但是有些情况下,我们不希望在类的外部对类内部的属性和方法进行操作。我们就可以把这个属性或方法封装成私有形式。


4、稀有属性的访问限制

设置私有属性的方法非常简单:在属性名和方法前面加上两个下划线__即可。

示例:

class Person():
    def __init__(self, name):
        self.name = name
        self.__age = 18


xiaoming = Person('小明')
print(xiaoming.name)
print(xiaoming.age)  # AttributeError: 'Person' object has no attribute '__age'
# 报错,提示Person对象没有属性'__age'

类中的私有方法和私有属性,不能被子类继承。

当然,我们可以定义一个统计的访问“接口”(函数),专门用于实现私有属性的访问。


5、私有属性设置与访问“接口”

接口就是我们通常说的一个函数,这个函数可以实现对某些属性的访问(设置与获取)

外部可以通过特定的“接口”来实现对私有属性的方法。

在Python中,一般定义函数名’get_xx’用来获取私有属性,定义‘set_xx’用来修改私有属性值。

class Person():
    def __init__(self, name):
        self.name = name
        self.__age = 18

    def get_age(self):
        # 内部访问:允许直接访问
        # 外部访问:根据需求要添加限制条件
        return self.__age

    # 公共方法:提供给外部的设置接口
    def set_age(self, age):
        self.__age = age


xiaoming = Person('小明')
xiaoming.set_age(20)
print(xiaoming.get_age())

'''
20
'''

6、私有方法

私有方法的定义与私有属性基本一致,在方法名的前面添加两个下划线__方法名()

示例:

class Person():
    def __init__(self, name):
        self.name = name
        self.age = 18

    def __money(self):
        print('我有800元的私房钱')


xiaoming = Person('小明')
xiaoming.__money()  # AttributeError: 'Person' object has no attribute '__money'
# 报错,提示Person对象没有属性'__money'

7、封装性到底有何意义

①以面向对象的编程思想进行项目开发

②封装数据属性:明确的区分内外,控制外部对隐藏的属性的操作行为(过滤掉异常数据)

class Person():
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def tell_info(self):
        print('name:<%s>age:<%s>' % (self.__name, self.__age))

    # 对私有属性的访问接口
    def set_info(self, name, age):
        if not isinstance(name, str):
            print('名字必须是字符串类型')
            return
        if not isinstance(age, int):
            print('年龄必须是数字类型')
            return
        self.__name = name
        self.__age = age


xiaoming = Person('小明', 18)
xiaoming.tell_info()

xiaohua = Person('小华', 20)
xiaohua.tell_info()

xiaohong = Person('小红', 19)
xiaohong.tell_info()

'''
name:<小明>age:<18>
name:<小华>age:<20>
name:<小红>age:<19>
'''

③私有方法封装的意义:降低程序的复杂度

class ATM():
    def  __card(self):
         print('插卡')
    def  __auth(self):
         print('用户认证')
    def __input(self):
          print('输入取款金额')
    def __print_bill(self):
          print('打印账单')
    def __take_money(self):
          print('取款')

    # 定义一个对外提供服务的公共方法
    def withdraw(self):
          self.__card()
          self.__auth()
          self.__input()
          self.__print_bill()
          self.__take_money()

atm = ATM()
atm.withdraw()

'''
插卡
用户认证
输入取款金额
打印账单
取款
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值