面向对象是python最重要的特性,在python中一切数据类型都是面向对象的。
面向对象的编程思想是,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建的软件系统就存在什么样的实体。
类,实体,属性,对象,面向对象编程object oriented programming,OOP
面试对象的三个基本特殊:封装、继承、多态
封装
封装能够使外部访问者不能随意存取对象的内部数据,隐藏了对象的内部细节,只保留有限的对外接口。外部访问者不用关心对象的内部细节,操作对象变得简单。
继承
特殊类继承一般类,一般类为父类,特殊类为子类。
多态
多态性是指在父类中成员被子类继承之后,可以具有不同的状态或表现行为。
类和对象
python中的数据类型都是类,类是组成python程序的基本要素,它封装了一类对象的数据和操作。
定义类
python语言中一个类的实现包括类的定义和类体
class 类名 [ (父类) ]:
类体
类名,采用大骆峰命名法
”父类“ 申明当前类继承的父类,父类可以省略,表示直接继承object类。
class Animal(object):
# 类体
pass
object 是所有类的根类,在python中任何一个动物类都直接或者间接继承object,所以object部分代码可以省略。
代码的pass语句什么操作都不执行,用来维持程序结构的完整,有些不想编写的代码,有不想有语法错误,可以用pass 语句占位。
创建和使用对象
类实例化可生成对象,所以对象也称为实例。
一个对象的生命周期包括三个阶段:创建、使用、销毁。
销毁对象时python的垃圾回收机制释放不在使用对象的内存,不需要程序员负责。
创建对象很简单,就是在类的后面加上一对小括号,表示调用类的构造方法。
animal = Animal()
Animal是上面定义的动物类,Animal()表达式创建了一个动物对象,并把创建的对象赋值给animal变量,Animal是指向动物对象的一个引用。通过animal变量,可以使用刚刚创建的动物对象
class Animal(object):
pass
animal = Animal()
print(animal)
# <__main__.Animal object at 0x000001F9A8E17430>
print函数打印对象会输出一些比较难懂的信息,事实上,print函数调用了对象的__str__()
方法输出字符串信息,__str__()
是object类的一个方法,它会返回有关该对象的描述信息,由于本例中。本例中的__str__()
方法是默认实现的,所以会返回。这些难度的信息如果要打印出友好的信息,需要重写__str__()
方法
__str__()
这种双下划线开始和结尾的方法是python保留的有着特殊含义称为魔法方法