飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 1994|回复: 9

私有化属性以及公有赋值和取值

[复制链接]
  • TA的每日心情

    5 天前
  • 签到天数: 295 天

    [LV.8]以坛为家I

    发表于 2022-11-13 13:01:17 | 显示全部楼层 |阅读模式
    本帖最后由 paypojie 于 2022-11-13 13:06 编辑

                                                                                 类的私有化


    前言     封装 定义私有化属性 定义公有 set get 方法
    [Python] 纯文本查看 复制代码
    # 先看一组没有私有属性的类
    class Student():
        def __init__(self,name,age,score):
    
            self.name = name
            self.age = age
            self.score = score
    
        # 定义一个__str__方法 打印对象名时 自动调用此方法 该方法需要配合return语句 用来返回被打印的值
        def __str__(self):
    
            # 必须返回字符串 如果直接返回 self.name,self.age,self.score 会报错
            return '%s %s %s' % (self.name,self.age,self.score)
    
            # return '{} {} {}'.format(self.name,self.age,self.score)
    
    # 创建实例对象
    s = Student('Emma',18,59)
    # 打印对象名时 自动调用__str__方法
    print(s)
    # 输出s这个对象的score属性
    print(s.score)

    屏幕截图_20221113_112626.png




    [Python] 纯文本查看 复制代码
    # 现在 我想让score不可以通过s.score这种形式调用 以及修改
    
    class Student():
        def __init__(self,name,age,score):
    
            self.name = name
            self.age = age
    
            # 私有化 在变量名前面添加两个下划线就行
            self.__score = score
    
        def __str__(self):
    
            return '%s %s %s' % (self.name,self.age,self.__score)
    
    s = Student('Emma',18,59)
    print(s)
    
    #  去掉下面一行的注释 发现会报错 因为score私有化了 不能被访问 私有化属性只能在类里面访问
    # print(s.__score)
    
    # 尝试修改属性
    s.__score = 60
    # 发现score属性没有被修改
    print(s)

    屏幕截图_20221113_112847.png




    [Python] 纯文本查看 复制代码
    # 定义公有set和get
    # set为了赋值 get为了取值
    
    class Student():
        def __init__(self,name,age,score):
    
            self.name = name
            self.age = age
            self.__score = score
    
        def __str__(self):
    
            return '%s %s %s' % (self.name,self.age,self.__score)
    
        def setScore(self,score):
            self.__score = score
    
    s = Student('xiaoming',18,59)
    print(s)
    s.setScore(60)
    print(s)

    屏幕截图_20221113_113135.png




    [Python] 纯文本查看 复制代码
    class Student():
        def __init__(self,name,age,score):
    
            self.name = name
            self.age = age
            self.__score = score
    
        def __str__(self):
    
            return '%s %s %s' % (self.name,self.age,self.__score)
    
        def getScore(self):
            return self.__score
    
    s = Student('xiaoming',18,59)
    # 去掉下面一行代码会报错
    # print(s.__score)
    
    print(s.getScore())


    屏幕截图_20221113_113324.png






    小结

    私有化属性 在属性名前面加__  属性就变成了私有属性 只能在类里面进行访问 外界是无法访问的
    为了不让外界随意访问 定义公有set和get方法 可以允许修改和访问你指定的私有属性  
    不一定需要用setXxx getXxx 这种形式 这样写 只是为了见名知意

    set和get方法里面用if...else 这种条件判断语句 将能够更好的指定访问和修改属性值的范围


    截图    都是计算机开源技术大神 最顶尖的那一批    https://www.facesofopensource.com/


    屏幕截图_20221113_120115.png




    私有化属性以及公有赋值和取值
    https://www.52pojie.cn/thread-1712016-1-1.html
    (出处: 吾爱破解论坛)




    评分

    参与人数 1威望 +1 飘云币 +1 收起 理由
    laoda1228 + 1 + 1 热心分享 共同提升!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    难过
    3 天前
  • 签到天数: 528 天

    [LV.9]以坛为家II

    发表于 2022-11-13 15:48:51 | 显示全部楼层
    Python没有真的私有化属性和方法啊
    PYG19周年生日快乐!
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-21 07:24
  • 签到天数: 562 天

    [LV.9]以坛为家II

    发表于 2022-11-13 15:24:13 | 显示全部楼层
    看到这帖子真是高兴!
    PYG19周年生日快乐!
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情

    5 天前
  • 签到天数: 295 天

    [LV.8]以坛为家I

     楼主| 发表于 2022-11-13 17:20:41 | 显示全部楼层
    laoda1228 发表于 2022-11-13 15:24
    看到这帖子真是高兴!

    看到评论 我也是

    评分

    参与人数 1威望 +1 飘云币 +1 收起 理由
    laoda1228 + 1 + 1 热心分享 共同提升!

    查看全部评分

    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    5 天前
  • 签到天数: 295 天

    [LV.8]以坛为家I

     楼主| 发表于 2022-11-13 17:21:22 | 显示全部楼层
    乐活 发表于 2022-11-13 15:48
    Python没有真的私有化属性和方法啊

    Python私有属性与私有方法

    “在Python 中,并没有真正意义上的私有,因为 Python 内部在给属性、方法命名时,对名称做了一些特殊处理,使得外界无法访问到对应的属性和方法。”更多 >


    点评

    多谢多谢!  详情 回复 发表于 2022-11-13 17:31
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    3 天前
  • 签到天数: 528 天

    [LV.9]以坛为家II

    发表于 2022-11-13 17:31:04 | 显示全部楼层
    paypojie 发表于 2022-11-13 17:21
    Python私有属性与私有方法

    “在Python 中,并没有真正意义上的私有,因为 Python 内部在给属性、方法命 ...

    多谢多谢!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    5 天前
  • 签到天数: 295 天

    [LV.8]以坛为家I

     楼主| 发表于 2022-11-13 17:43:11 | 显示全部楼层

    不用谢 每次我的帖子下面都有你
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    5 天前
  • 签到天数: 295 天

    [LV.8]以坛为家I

     楼主| 发表于 2022-11-14 18:28:10 | 显示全部楼层
    shj2k 发表于 2022-11-14 15:07
    学习学习。。。

    学吧 学吧。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    3 小时前
  • 签到天数: 445 天

    [LV.9]以坛为家II

    发表于 2022-11-25 06:19:33 | 显示全部楼层
    看到这帖子真是高兴!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表