Python之封装

本文主要探讨了Python的封装特性,包括将数据和功能整合到一起,并介绍了如何隐藏类中的属性以实现更严格的控制。隐藏属性能确保外界通过类提供的接口进行操作,允许在接口上添加逻辑控制,同时隔离复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、封装

1、封装
封装指的就是把数据与功能都整合到一起

2、在封装的基础上,我可以将装到对象或者类中的属性给隐藏起来

注意:

(1)在定义类或者初始化对象时,在属性前加__,就会将该属性隐藏起来但该隐藏起始只是一种变形_类名__属性名,并没有真的隐藏起来
			
(2)该变形操作是在类定义阶段扫描语法时发生的变形,类定义之后添加的__开头的属性不会发生变形
			
(3)该隐藏是对外不对内
			
(4) 在继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义为私有的???
# 例11
class Student:
    __school = "oldboy"  # _Student__school = "oldboy"

    def __init__(obj, x, y, z):
        obj.__name = x  # obj._Student__name = x
        obj.age = y
        obj.gender = z

    def __choose(self):  # obj._Student__choose
        print("%s 正在选课" %self.name)


stu_obj1 = Student("冯疯子", 18, "female")
stu_obj1.__x=111
print(stu_obj1.__dict__)
print(stu_obj1.__x)



print(stu_obj1.__dict__)
print(stu_obj1._Student__name)

print(Student.__dict__)
print(Student._Student__school)
print(stu_obj1._Student__school)

隐藏属性的意义何在
1、把数据属性隐藏起来的意义是:在类内开放接口,让外界使用者通过接口来操作属性值,我们可以在接口之上附加任意的逻辑
来严格控制外界使用者对属性的操作

class Student:
    __school = "oldboy"  # _Student__school = "oldboy"

    def __init__(obj, x, y, z):
        obj.__name = x  # obj._Student__name = x
        obj.__age = y
        obj.gender = z

    def __choose(self):  # obj._Student__choose
        print("%s 正在选课" % self.name)

    def get_name(self):
        print(self.__name)  # print(self._Student__name)

    def set_age(self,x):
        if type(x) is not int:
            print("年龄必须是整型,傻叉")
            return
        self.__age = x

    def get_age(self):
        print(self.__age)

    def del_age(self):
        del self.__age

stu_obj1 = Student("冯疯子", 18, "female")
# stu_obj1.get_name()


# stu_obj1.set_age("asfdasfdasfafd")
stu_obj1.set_age(19)
stu_obj1.get_age()
# print(stu_obj1.__dict__)

2、把功能属性隐藏起来:隔离复杂度

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()

a=ATM()
a.withdraw()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值