1.类和实例
类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
内存地址
- 给实例绑定属性
- 由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去
2.数据封装
就是在类里面定义方法,来访问类里面的数据
从外部看Student
类,就只需要知道,创建实例需要给出name
和score
,而如何打印,都是在Student
类的内部定义的,这些数据和逻辑被“封装”起来了,调用很容易,但却不用知道内部实现的细节。
3.访问限制
属性名称前面加上“_ _”两个下划线,就变成了私有变量只有内部可以访问。
【双下划线开头,并且以双下划线结尾的“__xx__”,是特殊变量,特殊变量是可以直接访问的,不是private变量】
如修改上面的Student类
这样就访问不到了,限制了访问。如果想要获取 可以在类中再次定义如get_score()方法,用来获取。【其他需求同理】
请把下面的Student
对象的gender
字段对外隐藏起来,用get_gender()
和set_gender()
代替,并检查参数有效性:
4.继承和多态
- 继承就是class Student(object): 因为Student 没有继承什么,所以写object 所有的类都继承object。
- 可以在子类中对父类中的方法进行改进(当存在和父类相同的方法的时候,运行时子类的方法会覆盖父类的方法)
- 多态就是比如Student 继承了People 可以看到 A既是Student类型又是People类型。【反过来就不行】
多态的好处:
新增一个People的子类,不必对another()
做任何修改,实际上,任何依赖People作为参数的函数或者方法都可以不加修改地正常运行,原因就在于多态。
开闭原则:
对扩展开放:允许新增People子类;
对修改封闭:不需要修改依赖People类型的another()
等函数