心妍 发表于 2022-11-13 13:01:17

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

本帖最后由 paypojie 于 2022-11-13 13:06 编辑

                                                                         类的私有化


前言   封装 定义私有化属性 定义公有 set get 方法
# 先看一组没有私有属性的类
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)


static/image/hrline/3.gifhttps://www.chinapyg.com/static/image/hrline/3.gif


# 现在 我想让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)


https://www.chinapyg.com/static/image/hrline/3.gifhttps://www.chinapyg.com/static/image/hrline/3.gif


# 定义公有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)


https://www.chinapyg.com/static/image/hrline/3.gifhttps://www.chinapyg.com/static/image/hrline/3.gif


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())



https://www.chinapyg.com/static/image/hrline/3.gifhttps://www.chinapyg.com/static/image/hrline/3.gif




小结

私有化属性 在属性名前面加__属性就变成了私有属性 只能在类里面进行访问 外界是无法访问的
为了不让外界随意访问 定义公有set和get方法 可以允许修改和访问你指定的私有属性
不一定需要用setXxx getXxx 这种形式 这样写 只是为了见名知意
set和get方法里面用if...else 这种条件判断语句 将能够更好的指定访问和修改属性值的范围


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






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




乐活 发表于 2022-11-13 15:48:51

Python没有真的私有化属性和方法啊

laoda1228 发表于 2022-11-13 15:24:13

看到这帖子真是高兴!

心妍 发表于 2022-11-13 17:20:41

laoda1228 发表于 2022-11-13 15:24
看到这帖子真是高兴!

看到评论 我也是

心妍 发表于 2022-11-13 17:21:22

乐活 发表于 2022-11-13 15:48
Python没有真的私有化属性和方法啊

Python私有属性与私有方法

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


乐活 发表于 2022-11-13 17:31:04

paypojie 发表于 2022-11-13 17:21
Python私有属性与私有方法

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

多谢多谢!

心妍 发表于 2022-11-13 17:43:11

乐活 发表于 2022-11-13 17:31
多谢多谢!
不用谢 每次我的帖子下面都有你 {:4_262:}

shj2k 发表于 2022-11-14 15:07:55

学习学习。。。

心妍 发表于 2022-11-14 18:28:10

shj2k 发表于 2022-11-14 15:07
学习学习。。。

学吧 学吧。

飞天梦 发表于 2022-11-25 06:19:33

看到这帖子真是高兴!
页: [1]
查看完整版本: 私有化属性以及公有赋值和取值