面向对象 第二部分 访问限制

1 没有范围限制    在类外部可以更改类内部的属性值
# 但是,既然Student实例本身就拥有这些数据,要访问这些数据,就没有必要从外面的函数去访问,
# 可以直接在Student类的内部定义访问数据的函数,这样,就把“数据”给封装起来了.
# 这些封装数据的函数是和Student类本身是关联起来的,我们称之为类的方法:
class Student(object):
    def __init__(self,name,score):
        self.name= name #实例变量名前加下划线 就变成了一个私有变量,只有内部可以访问,外部不能访问
        self.score= score
    def print_score(self):
        print('%s:%s'%(self.name,self.score))
    def get_grade(self):
        if self.score>= 90:
            return 'A'
        elif self.score>= 60:
            return 'B'
        else:
            return 'C'

# 创建实例 仅做传参,不管类内做的(类内部决定了打印的效果,比如新增加一个判断ABC级别的类)
bart=Student('fqs',59)
# 调用类中封装的方法
bart.print_score()# 打印成绩 fqs:59
print(bart.get_grade())# 打印成绩的等级
# 更改他的姓名和成绩
bart.score= 99
bart.print_score()# 打印成绩 fqs:99
2.  类内的属性  访问受限;通过在属性前面加双下划线  使其变成了私有属性 

class Student(object):

    def __init__(self,name,score):
        self.__name= name #实例变量名前加下划线 就变成了一个私有变量,只有内部可以访问,外部不能访问
        self.__score= score
    def print_score(self):
        print('%s:%s'%(self.__name,self.__score))
    def get_grade(self):
        if self.__score>= 90:
            return 'A'
        elif self.__score>= 60:
            return 'B'
        else:
            return 'C'
    def get_name(self):
        return self.__name
    def get_score(self):
        return self.__score

# 创建实例 仅做传参,不管类内做的(类内部决定了打印的效果,比如新增加一个判断ABC级别的类)
bart=Student('fqs',59)
# 调用类中被封装的属性
# print(bart.__name)# 不建议之间调用私有的属性会报错
# print(bart.__score)
print(bart.get_name()) # 建议通过方法来调用私有的属性
print(bart.get_score())

 

 

posted @ 2023-07-14 16:23  胖豆芽  阅读(9)  评论(0编辑  收藏  举报