学py之类和实例

1.实例拥有各自的数据之后,我们就可以用函数直接访问这些数据,比如打印一个学生的名字和分数

>>> def print_score(std):
...     print('%s: %s' % (std.name, std.score))
...>>> print_score(bart)
Bart Simpson: 59

2.封装的好处:第一个是可以用函数直接调用学生的数据,第二个是给类增加新的方法

class Student(object):
    ...

    def get_grade(self):  #此处依旧是用self
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'

同样的 ger_grade 方法可以直接在实例变量上调用,不需要内部实现细节;

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score


    def get_grade(self):
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'

        else:

            return 'C'

lisa = Student('Lisa', 99)
bart = Student('Bart', 59)
print(lisa.name, lisa.get_grade())
print(bart.name, bart.get_grade())

3.访问限制

在Class中,如果让内部属性不让外部访问,在属性的名称前加__ python中 实例变量名以__开头 则变成了一个私有变量,只有内部能访问:

我们修改Student的这个类

class Student(object):

    def __init__(self, name, score):
        self.__name = name   #把self.name 改为了self.__name  属性的名称前加__
        self.__score = score

    def print_score(self):
        print('%s: %s' % (self.__name, self.__score))

此时用命令 bart = Student(Bart Simpson,59)

                 bart.__name

就不能访问了bart的属性了,但是要从外部访问呢

就可以在类中添加方法,然后用该方法返回之前的bart属性

    def get_name(self):
        return self.__name

如果要从外部修改属性代码怎么办呢?

依旧添加方法


    def set_score(self, score):
        self.__score = score  #在类中添加方法 

未避免传入无效参数,在方法中可以用一个if条件句来检查。


    def set_score(self, score):
        self.__score = score

class Student(object):
    ...

    def set_score(self, score):
        if 0 <= score <= 100:
            self.__score = score
        else:
            raise ValueError('bad score')

双下线的实例变量其实也可以在外部访问,私有实例其实是python解释器将__name实例变成了_Student__name,所以我们可以通过访问_Student__name来访问__name变量;

>>> bart._Student__name


    def set_score(self, score):
        self.__score = score
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值