程序猿大战Python——面向对象——私有权限

私有属性

==目标:==掌握私有属性的使用。

为了更好的限制属性的访问和包含隐私,可以给属性设置私有权限。

当把属性设置为私有属性后,则该属性只能被本类直接访问。

定义私有属性语法:

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、一切都是类;

  • 30
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

困了就倒头睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值