前言:
作者简介:短尾巴小鳄鱼 ,一位不放弃自己的上进卷妹
💬 如果文章知识点有错误的地方,请留言指正~和大家一起学习,一起进步
💬 人生格言:昨日种种,皆成今我。今日种种,方成新我。切莫踌躇,莫停留,莫沉溺💬
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦
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'
例子:
私有属性无法被实例化对象调用,但可以在类内部被调用:
私有函数无法被实例化对象调用,但可以在类内部被调用:
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),并根据提示对该类进行进一步封装,使其拥有工具类型、速度、体积等属性值。通过自定义实例方法实现交通工具的前移、速度设置、获取当前速度、加速行驶、减速行驶、实例信息展示、实例类型判别等功能。
效果图如下:
代码参考:
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()