Python面向对象编程(1)类和实例【转载】
面向过程和面向对象编程
面向过程(Procedure Oriented Programming,POP)和 面向对象编程(Object Oriented Programming,OOP) 是两种主要的程序设计思想。这里简单通俗地讲一下两者的区别:
编程的目的:为了去解决一个问题,或者处理一件事情,比如编写一个程序自动处理学生的信息,或者编写一个程序可以自动做北京烤鸭。
面向过程编程:按顺序编写一系列程序集合,然后执行,得到想要的结果。比如处理学生信息时:先编写一条代码获取学生性别信息,然后再获取成绩信息,最后打印出该学生的姓名及成绩,对于每一个学生,把前面的代码执行一遍就可以打印出相应的信息。
对于做北京烤鸭也是类似,第一步洗鸭子,接着烤鸭子,最后切了吃掉,吃完了还不饱 ,那就再执行一次,再吃一只。按照我们写好的命令集合顺序执行,之后得到想要的结果,这就是面向过程的编程,其注重的是编写整个处理的流程。当然为了简化程序设计,面向过程运用函数把整个过程切分为多个子函数降低系统的复杂度,但它依然是面向过程编程。
面向对象编程:面向对象的编程把计算机程序视为一组对象的集合。比如,处理学生信息时,面向对象的编程并不是想着怎么编写程序去处理每个学生的信息,而是把所有这些学生当作一个类(Class),同时把处理类的程序也当作类的一部分,即所有的学生构成一个类,类有自己的属性和方法,比如姓名和成绩都是属性,而打印成绩就是方法,而每一个具体的学生只不过是类的一个实例/对象。这样不仅可以使代码更简洁,也很容易修改属性和方法。
举个例子说明具体的区别:
面向过程
std1 = { 'name': 'Michael', 'score': 98 }
std2 = { 'name': 'Bob', 'score': 81 }
# 处理学生信息可以通过函数实现,比如打印学生的成绩:
def print_core(std):
print('%s : %s'%(std['name'],std['score']))
print_core(std1)
print_core(std2)
Michael : 98
Bob : 81
面向对象
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))
amy = Student('amy',120)
jack = Student('jack',108)
amy.print_score()
jack.print_score()
amy : 120
jack : 108
类与实例
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,是一个统称,泛指所有的学生,而实例是根据类创建出来的一个具体的“对象”,比如张三、李四,每个对象都拥有相同的方法,但各自的数据/属性可能不同。
以Student类为例,在Python中,定义类是通过class关键字:
class Student(object):
pass
class 后面紧接着是类名,即 Student,类名通常是大写开头的单词,通常采用大驼峰命名法,紧接着是(object),表示该类是从哪个类继承下来的,继承的概念后面再讲,通常,如果没有合适的继承类,就使用 object 类,这是所有类最终都会继承的类。
定义好了 Student 类,就可以根据 Student 类创建出 Student 的实例,创建实例是通过类名+()实现的:
amy = Student()
print(amy)
print(Student)
<__main__.Student object at 0x000001E75252CBE0>
可以看到,变量 amy 指向的就是一个 Student 的实例,后面的 0x000001E75252CBE0 是内存地址,每个object的地址都不一样,而Student本身则是一个类。