转自廖雪峰的博客
在面向对象编程中需要考虑:对象、属性、方法,实例化。面向对象编程具有三大特点:数据封装、继承和多态
举例:打印学生成绩。
处理学生的成绩表,如果采用面向对象的程序设计思想,我们首选思考的不是程序的执行流程,而是Student这种数据类型应该被视为一个对象,这个对象拥有name和score这两个属性(Property)。如果要打印一个学生的成绩,首先必须创建出这个学生对应的对象,然后,给对象发一个print_score消息,让对象自己把自己的数据打印出来。
程序实现如下:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
def print_score(self):
print '%s: %s' % (self.name, self.score)
bart = Student('Bart Simpson', 59)
lisa = Student('Lisa Simpson', 87)
bart.print_score()
lisa.print_score()
数据封装:
类有自己对应的属性和方法,一个类可以实例化出多个不同的对象,每个实例通过类的方法可以访问各自的数据。
注意:访问限制
属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问。
在访问限制的情况下,需要定义对应的get_和set_方法来获取属性值或者对属性赋值。
继承:
当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。继承可以使子类获得了父类的全部功能,同时在继承的基础上可以产生多态。
多态:
当子类和父类有相同的方法时,子类的方法会覆盖父类的方法。
注意:使用dir可以获得一个对象的所有属性和方法。