SZTU-ACM 第七周

        接上一篇。

面向对象编程

1.访问限制

        (1)让外部代码不能随意修改对象内部属性

                在内部属性前加上两个下划线,外部代码就不能访问了。注意:在Python中,类似__xxx__的,即两个下划线开头和两个下划线结束的是特殊变量,不是private变量,所以要避免使用这种名字。

访问限制前:
class Student(object):
    def __init__(self,name,score):
        self.score=score
        self.name=name
    def print_score_name(self):
        print("%s : %s"% (self.name,self.score))
bart=Student("Jerry",99)
bart.print_score_name()#注意这两个调用的不同方式
print(bart.name)
#输出Jerry:99
Jerry

访问限制后:
class Student(object):
    def __init__(self,name,score):
        self.__score=score#注意下划线的位置!
        self.__name=name
    def print_score_name(self):
        print("%s : %s"% (self.__name,self.__score))
bart=Student("Jerry",99)
print(bart.name)#报错!

        (2)使用get_属性名,让外部代码能够访问

        (3)使用set_属性名,让外部代码能够修改属性

                好处:可以进行参数检查,防止传入参数

class Student(object):
    def __init__(self,name,score):
        self.__score=score#注意下划线的位置!
        self.__name=name
    def print_score_name(self):
        print("%s : %s"% (self.__name,self.__score))
    def get_name(self):
        return self.__name
    def get_score(self):
        return self.__score
    def set_score(self,score):#参数检查
        if 0<=score<=100:
            self.__score=score
        else:
            raise ValueError("error score")
bart=Student("Jerry",99)
print(bart.get_score())#实现外部访问,输出99
bart.set_score(66)#实现修改
print(bart.get_score())#输出66
bart.set_score(-11)#报错:error score

2.继承和多态

        (1)定义:

        当我们要定义一个新的class时,可以从原有的一个class继承,被继承的旧class叫基类,父类或超类,继承的新class叫子类

        (2)特点:

a.子类同时继承父类所有的功能

b.子类和父类同时拥有同一功能时,对子类的该功能进行修改,调用执行时会只执行子类的该功能,即子类可以覆盖父类的该功能实现多态

class Fruit(object):
    def color(self):
        print("fruit is green")
class Apple(Fruit):
    pass
class Banana(Fruit):
    def color(self):
        print("fruit is yellow")
apple=Apple()
banana=Banana()
print(apple.color())#继承  输出:fruit is green
print(banana.color())#多态  输出:fruit is yellow
def print_twice(fruit):
    fruit.color()
    fruit.color()#可以加上return
print(print_twice(Fruit()))#输出:fruit is green两次
print(print_twice(apple))#fruit is green 两次
print(print_twice(banana))#fruit is yellow两次

    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值