详解Python面向对象编程之类、实例、方法

面向对象编程
面向过程编程:Procedure Oriented Programming,简称POP。在之前的介绍中,它主要使用面向过程的想法。面向过程的思想是以事件为中心的编程思想,即分析解决问题所需的步骤,然后用函数实现写作步骤,将大函数切成小函数,并按顺序调用。
面向对象的编程:Object Oriented Programming,简称OOP。面向对象的思想是以对象为中心的编程思想,程序的执行过程是在每个对象之间传递一系列信息的过程。
什么是对象?在Python中,所有的数据类型都可以被视为对象,“一切都是对象”。
类 Class
Class,类,是面向对象编程最重要的概念之一。类是抽象的模板,例子是根据类创建的对象。例如:
类的定义
通过class关键字在Python中定义一个类:
classAnimal(object): pass
Animal是类名,类名一般从大写字母开始,后面( )如果没有合适的继承类别,则使用object,因为所有类别都将继承该类别。继承是面向对象的三个特征之一,稍后将介绍。
类的属性
类的定义完成后,我们可以定义类的属性,如:
classAnimal(object): name='animal'
调用其属性时,以“对象名.属性名”的形式调用,如:
>>>Animal.name animal
实例 Instance
Instance,例子是面向对象编程最重要的概念之一。例子是根据类创建的对象。事实上,面向对象编程是使用“类”和“实例”。
实例的定义
有了类之后,可以根据类来定义相应的例子。
>>>dog=Animal()>>>dog <__main__.Animalobjectat000000001DB87>
上面的dog就是Animal的一个例子,后面的0x0000001DB8780就是内存地址。
实例的属性
同样,我们可以定义实例的属性
>>>dog.name='dog' >>>dog.name dog
因为类是实例的模板,一般来说,我们可以在定义类时绑定相应实例的属性。这需要在类中定义一个__init__方法(方法类似函数,稍后会介绍)
classAnimal(object): name='animal' def__init__(self,name,age): self.name=name self.age=age
注意到__init__方法的第一个参数总是self,这意味着创建实例本身。self指向实例,然后添加所需的参数。这样,在创建实例时,需要输入相应的参数,但不需要输入self参数,因为Python解释器会传输实例变量。
>>>dog=Animal('dog',3)
>>>dog.name
dog
>>>dog.age
3需要注意的是,实例可以访问其他属性,比如删除dogname属性后再调用。
>>>deldog.name >>>dog.name animal
由此可见,dog访问了Animal的name属性,而dog具有name属性时,dog属性优先。
方法
该方法可以理解为类中定义的函数。与函数不同的是,该方法的第一个参数必须是self,其他参数与函数相同,也可以使用默认参数、可变参数、关键字参数和命名关键字参数。
上面的__init__是一种方法,当然,我们也可以定义其他方法,比如在Animal中添加一种say方法:
classAnimal(object):
name='animal'
def__init__(self,name,age):
self.name=name
self.age=age
defsay(self):
print('wow...wow')以“实例名、方法名(参数)”为例,可通过实例调用方法
>>>dog=Animal('dog',3)
>>>dog.say()
wow...wow 