Python进阶--------高级部分之面向对象(三)

 

一、1. 为了保证类变量数据的安全,如何做才可以不能通过对象访问类变量任意去访问或者直接修改

       2. 成员的可见性

       3. 公共的 pubic 私有的 private(python没有这两个关键字)

       4. python中在方法前写__(两个下划线)-------代表私有方法

、1.Python里的私有表示和公共表示:

代码区:

class Student():
    name = ""
    age = 0
    # 统计当前班级人数

    sum = 0

    
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.score = 0
        # self.__class__.sum += 1
        # print("当前的班级的人数为:" + str(self.__class__.sum))
    
    def marking(self, score):
        if score < 0:
            return "输入成绩有误请重新输入"

        self.score = score
        print(self.name + "同学的本次考试成绩为:" + str(self.score))

    def do_English_Homework(self):
        print("do English homework")

    # 实例方法
    def do_homework(self):
        # 在内部调用方法
        self.do_English_Homework()
        print("do your homework")

    # 类方法
    @classmethod
    def plus_sum(cls):
        cls.sum += 1
        print(cls.sum)

student1 = Student("菲神", 19)
student1.marking(99)

运行结果:

分析:

拿学生类里面的making方法来讲如果这个方法不想被在类外访问那么如何做呢?   修改代码如下:

# 修改代码:
def __marking(self, score):
        if score < 0:
            return "输入成绩有误请重新输入"

        self.score = score
        print(self.name + "同学的本次考试成绩为:" + str(self.score))

运行结果:很明显通过执行结果来看无法访问making方法

                                     那么如何定义私有方法你会了吗?

三、原始代码:

class Student():

def __init__(self, name, age):
    self.__score = 0

def marking(self, score):
        if score < 0:
            return "输入成绩有误请重新输入"

        self.__score = score
        print(self.name + "同学的本次考试成绩为:" + str(self.__score))

student1 = Student("菲神", 19)

student1.__score = -1

print(students1.__score)

运行结果:

问题:为什么在类的外部对一个私有的成员变量赋值,程序不会报错呢?

问题解释:由于Python语言的动态特性,也就是说你student1.__score的时候Python自动认为你新建了一个变量比赋值为-1,并                   不是说实例方法里的私有变量没有生效。为了更具有束缚力

验证解释:通过输出他们的信息:__dict__方法

部分代码:

#在类外的code
student1 = Student("菲神", 19)
student1.marking(99)

student2 = Student("詹姆斯", 20)
student1.__score = -1

print(student1.__dict__)
print(student2.__dict__)

运行结果:

运行结果解析:从执行结果来看以及student1和student2二者的对比很明显可以找到你想要的答案,其中_Student__score实际上就是making方法私有变量self.__score,同时还验证了__score真的是Python认为你那是创建的一个新的变量

那么我们到底该如何访问私有变量呢?

参考上面的运行结果字典有一个_Student__score的一个元素

print(student2._Student__score)

执行结果:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值