私有属性
==目标:==掌握私有属性的使用。
为了更好的限制属性的访问和包含隐私,可以给属性设置私有权限。
当把属性设置为私有属性后,则该属性只能被本类直接访问。
定义私有属性语法:
self.__属性名
设置和获取私有属性值语法:
class 类名(xxx): # 设置私有属性值[set] def set_私有属性名(self,参数): self.私有属性 = 参数 # 获取私有属性值[get] def get_私有属性名(self): return self.私有属性
例如,一起来完成:
(1)FangGe把技术传承给小徒弟时,不想把自己的私房钱(¥6000000)继承给徒弟;
(2)这时,就要为私房钱这个属性设置私有权限;
(3)思考:若想要来访问私有属性,该怎么做呢?
# 1.父类:Master class Master(object): def __init__(self): self.__money = 6000000 # 设置 def set_money(self,money): self.__money = money # 获取 def get_money(self): return self.__money # 2.子类 class TuDi(Master): pass # 3.能否访问? # xiao_fang = TuDi() # print(xiao_fang.__money) # 不能访问? master = Master() master.set_money(5000000) print(master.get_money()) # 升级: # 1.当子类继承了父类后, 子类就拥有了父类的属性和方法 # 2.当子类继承了父类后, 子类就拥有了父类的【非私有】属性和【非私有】方法
==总结:==
(1)当要定义私有属性时,仅需要在属性名前添加();==A、双下划线==;B、不添加任何内容;
(2)注意:如果要从外部访问私有属性值,建议要在类中定义set/get方法。
私有方法
==目标:==了解私有方法的使用。
当把方法设置为私有方法后,则该方法只能被本类直接访问。
定义私有方法语法:
def __方法名(self): ...
例如,一起来完成:
(1)FangGe把技术传承给小徒弟时,不想把自己独创配方的制作过程继承给徒弟;
(2)这时,就要为制作独创配方这个方法设置私有权限;
(3)思考:该怎么访问私有方法呢?
# 1.定义父类 class Master(object): def __make_secret(self): print("===================") print("加葱姜蒜...") print("加酱油,加白醋") print("辣椒面...") print("制作好卖给我的学生!!") print("===================") # 间接 def use(self): self.__make_secret() # 2.子类?? # 3.直接访问 master = Master() # master.__make_secret() # 不能? master.use()
==总结:==
(1)当把方法设定为私有权限后,则该方法不会被继承给子类;
(2)注意:当子类继承了父类后,子类拥有父类的()。==A、非私有属性和非私有方法==;B、属性和方法;
面向对象综合案例
案例:减肥
==目标:==掌握面向对象方法和属性的使用。
例如,一起来完成:
(1)小方同学当前体重是100kg;
(2)每当他跑步一次时,则会减少0.5kg;
(3)每当他大吃大喝一次时,则会增加2kg;
(4)假如跑步5次后,再大吃大喝一次,体重如何?
(5)请试着采用面向对象思想来编写案例。
# 1.定义类:属性[变量]、行为[方法]
class Student(object):
def __init__(self):
# 默认
self.weight = 100
def run(self):
self.weight = self.weight - 0.5
print(f"跑步一次,减肥0.5kg,当前体重为:{self.weight}kg")
def eat(self):
self.weight += 2
print(f"=====大吃大喝一顿,增重2kg,当前体重为:{self.weight}kg")
# 2.创建对象
student = Student()
print(f"当前体重为:{student.weight}")
student.run()
student.run()
student.run()
student.run()
student.run()
student.eat()
==总结:==
(1)在类内部调用或获取属性时,可以使用()方式;==A、self.属性名==;B、类名.属性名;
(2)当通过对象来调用方法时,可以使用【self.方法名()】方式。
==总结:==
(1)我们会发现,对于魔法方法的使用,会在某些特殊时刻自动被调用;
(2)在学习面向对象知识时,我们会发现总结起来就是五个字:()。==A、一切皆对象==;B、一切都是类;