版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
面向对象编程OOP
类和实例
面向对象的设计思想是抽象出class
面向对象的抽象程度比函数要高
面向对象的三大特点是封装,继承和多态
类和实例
类是抽象的模板,实例是根据类创建出来的一个个具体对象
类class
calss后面紧接类名
class Student(object):
pass
实例instance
创建实例是通过类名加()实现
init(注意init前后分别有两个下划线)
数据封装
通过实力上的调用,我们直接操作了对象内部数据,但无需知道方法内部的实现细节
访问和限制
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__就变成了一个私有变量private,这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加强壮。如果外部代码要获取,可以增加get_name(),get_score()这样的方法
如果又要允许外部代码修改score,可以再给student类增加set_score方法:
一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是按照约定俗称的规矩,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是请把我看成私有变量,不要随意访问”。
继承和多态
子类,父类(基类,超类)
继承的好处,子类获得了父类的全部功能,还可以对子类增加一些方法
当子类和父类都存在相同的run()方法时,我们说,子类的run()会覆盖父类的run(),在代码运行的时候,总是会调用子类的run()这样,我们就获得了继承的另一个好处:多态。
判断一个变量是否是某个类型可以用isinstance()判断
如果继承关系中,实例数据类型是某个子类,那他的数据类型也是父类,反过来就不行,即dog 可以看成是Animal类,但Animal类不能看成是dog类