面向对象编程——Object Oriented Programming,简称 OOP,是一种程序设计思想
面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行, 面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度
面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
在 Python 中, 所有数据类型都可以视为对象, 同时也可以自定义对象. 自定义的对象类型就是面向对象中的类的概念.
面向过程处理学生信息打印名字和成绩的方法:
- std1 = {'name': 'Michael',
- 'score': 98
- }
- std2 = {'name': 'Bob',
- 'score': 81
- }
- def print_score(std) : print(' % s: %s' % (std['name'], std['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))
给对象发消息实际上就是调用对象的关联函数, 也就是方法 (Method).
上述的学生对象调用方法是
- bart = Student('Bart Simpson', 59)
- lisa = Student('Lisa Simpson', 87)
- bart.print_score()
- lisa.print_score()
类 (Class) 的个例就是实例(Instance), 面向对象有三个特点: 数据封装, 继承 和多态.
1 类和实例
定义类:
- class 类名(object):
- 类体
类名通常是首字母大写, object 表示是从哪个类继承而来的, 所有类都可以继承自 object 类.
创建实例
实例 = 类名 (参数列表)
初始化函数
上述的类名跟上参数列表是默认写入需要的参数, 是基于__init__() 方法的
- class Student(object):
- def __init__(self, name, score):
- self.name = name
- self.score = score
其中 init 的第一个参数永远是 self, 这个是表示创建的实例本身, 相当于 java 的 this, 在使用过程中传入参数不要管 self, 因为这是解释器会自己添加
但是与 java 不同的是, 如果有__init__方法了, 生成实例的时候就必须对应的传入需要的参数, 但是不用传入 self.
成员方法
类中的方法与别的方法的区别在于, 类中的方法第一个参数始终是 self, 表示实例自己, 但是传入参数的时候不用管它.
数据封装
数据封装就是写一些方法来调用对应的成员变量, 对外使用的时候就直接调用该方法了而不是直接调用里面的成员变量.
2 访问限制
根据上述的数据封装的方法, 切实的给予了外界使用成员变量的方法, 但是外界仍然可以继续直接调用成员变量
要设置私有的成员变量是将成员变量定义成以下划线开头的变量. 这样外界调用的时候就会报错了.
- class Student(object):
- def __init__(self, name, score):
- self.__name = name
- self.__score = score
- >>> bart = Student('Bart Simpson', 98)
- >>> bart.__name
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- AttributeError: 'Student' object has no attribute '__name'
来源: http://www.bubuko.com/infodetail-2001059.html