Python基础入门篇【31】--面向对象:类中的私有函数与私有变量

前言
作者简介:短尾巴小鳄鱼 ,一位不放弃自己的上进卷妹
💬 如果文章知识点有错误的地方,请留言指正~和大家一起学习,一起进步
💬 人生格言:昨日种种,皆成今我。今日种种,方成新我。切莫踌躇,莫停留,莫沉溺💬
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦

python类中的私有函数与私有变量

类中的私有函数与私有变量

什么是私有函数与私有变量?

  • 无法被实例化对象调用的类中的函数与变量
  • 类的内部可以调用私有函数与私有变量
  • 定义私有函数与私有变量的目的:只希望类的内部业务调用使用,不希望被使用者调用

如何定义私有函数与私有变量

在变量或函数前添加两个__(下划线)

class Person(object):
    def __init__(self, name):
        self.name = name
        self.__age = 33   # 私有变量

    def dump(self):
        print(self.name, self.__age)
        
    def __cry(self):      # 私有函数
        return 'i cant cry'

例子:

私有属性无法被实例化对象调用,但可以在类内部被调用:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1eyX9Tnp-1658996687182)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20220728103019542.png)]

私有函数无法被实例化对象调用,但可以在类内部被调用:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sb6BhyOD-1658996687184)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20220728102714188.png)]

python中的封装

将不对外的私有属性或方法通过可对外使用的函数而使用(类中定义私有的,只有类内部使用,外部无法访问)

这样做的主要原因:保护隐私,明确区分内外

上面举得例子其实已经实现了对私有函数的封装:

class Cat(object):
    __cat_type = 'cat'  

    def __init__(self, name, sex):
        self.name = name
        self.__sex = sex   #

    def run(self):
        result = self.__run()  # 在这里调用封装的私有函数
        print(result)

    def __run(self):    # 私有函数
        return f'{self.__cat_type},小猫{self.name}{self.__sex}开心的奔跑'

下面做一个小练习:

自定义一个交通工具类(Vehicle),并根据提示对该类进行进一步封装,使其拥有工具类型、速度、体积等属性值。通过自定义实例方法实现交通工具的前移、速度设置、获取当前速度、加速行驶、减速行驶、实例信息展示、实例类型判别等功能。

效果图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Na5YYdl-1658996687185)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20220728162322764.png)]
代码参考:

class Vehicle(object):
    def __init__(self, speed, size, trans_type='SUV'):
        self.new_speed = None
        self.__trans_type = trans_type
        self.speed = speed
        self.size = size

    def show_info(self):
        print(f'类型:{self.__trans_type} 速度:{self.speed} 体积:{self.size}')

    def move(self):
        print(f'我已向前移动了50米')

    def set_speed(self, new_speed):
        self.new_speed = new_speed

    def get_speed(self):
        return f'我的时速为:{self.new_speed}'

    def speed_up(self):
        self.new_speed_up = self.new_speed + 10
        print(f'我的速度由{self.new_speed}km/h提升到了{self.new_speed_up}km/h')
        self.new_speed += 10

    def speed_down(self):
        self.new_speed_down = self.new_speed_up - 15
        print(f'我的速度由{self.new_speed_up}km/h下降到了{self.new_speed_down}km/h')
        self.new_speed_up -= 15

    def transport_identify(self):
        if self.__trans_type == 'SUV':
            print('类型匹配')
        else:
            print('类型不匹配')


my_car = Vehicle(speed='40km/h', size=(3.6, 1.2, 2))
my_car.show_info()
my_car.move()
my_car.set_speed(new_speed=40)
print(my_car.get_speed())
my_car.speed_up()
my_car.speed_up()
my_car.speed_up()
my_car.speed_down()
my_car.speed_down()
my_car.transport_identify()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值