面向对象编程——Object Oriented Programming(OOP)
OOP 把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
抽象类实体对象,类不能对数据成员进行赋值。【Class 是一种抽象概念,而实例( Instance)则是一个个具体的 Student】
知识点:数据封装,访问控制,继承,多态。
- 类可以起到模板的作用
数据封装:数据和逻辑被“封装”起来了,调用很容易,而不用知道内部实现的细节
- 封装数据的函数称为类的方法。
- 类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响;方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据;通过在实例上调用方法,我们就直接操作了对象内部的数据,但无需知道方法内部的实现细节。
访问控制:可以对参数做检查,避免传入无效的参数。
class Student(object):
...
def set_score(self, score):
if 0 <= score <= 100:
self.__score = score
else:
raise ValueError('bad score')
继承:
# -*- coding: utf-8 -*-
# 继承就是可以起到功能扩展的功能,父类可以创建通用方法,子类可以调用,也可以重新写自己的方法
# 当子类和父类存在相同的方法时,子类的方法会覆盖父类的方法。
class Animal(object):
def run(self):
print("Animal is running on the road!...")
class Dog(Animal):
def run(self):
print("Dog is running!")
class Cat(Animal):
pass
dog = Dog()
dog.run()
cat = Cat()
cat.run()
print(isinstance(a,list))
print(isinstance(b,Animal))
print(isinstance(c,Dog))
print(isinstance(c,Animal))#子类一定属于其父类,反之则不行
多态:调用方只管调用,不管细节
- 定义一个class的时候实际上就定义了一种数据类型。
- 继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写;有了继承,才能有多态。在调用类实例方法的时候,尽量把变量视作父类类型,这样,所有子类类型都可以正常被接收。