前言:
面向对象(Object-oriented programming) 是一种符合人类思维习惯的编程思想。现实生活中存在着各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。
面向过程,是分析解决问题的需要的步骤,然后用函数把这些步骤一一实现,使用的时候一个一个依次调用就可以了。
面向对象,则是把解决的问题按照一定的规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。当然,一个应用程序会包含多个对象,通过多个对象的相互配合来实现应用程序的功能,这样当应用程序功能发生变化时,只需要修改个别的对象就可以了,从而使代码更容易得到维护。
换种方法说:面向对象就是:把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。 对同类对象抽象出其共性,形成类。 类中的大多数数据,只能用本类的方法进行处理。 类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。
一、面向对象技术:
- 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
- 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
- 数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
- 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
- 局部变量:定义在方法中的变量,只作用于当前实例的类。
- 实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
- 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟”是一个(is-a)”关系(例图,Dog是一个Animal)。
- 实例化:创建一个类的实例,类的具体对象。
- 方法:类中定义的函数。
- 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
二、创建类:
使用class语句创建:
class ClassName:
'类的帮助信息'
class_suite # 类体
其中类的帮助信息可以通过
ClassName.__doc__
查看
class_suite
由类成员、方法、数据属性构成。
下面是一个简单的Python类的例子:
class Employee:
'所有员工的基类'
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print("Total Employee %d" % Employee.empCount)
def displayEmployee(self):
print("Name : ", self.name, ", Salary: ", self.salary)
- empCount 变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 Employee.empCount 访问。
- 第一种方法
__init__()
方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法- self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
注:self 不是 python 关键字,我们把他换成 chanpoe也是可以正常执行的
三、创建实例对象:
在其他语言中,实例化类一般用关键字new,但是python没有这个关键字,类的实例化类似函数调用的方式。下面是类的实例化的例子:
emp1 = Employee('Chanpoe', 20000)
emp2 = Employee('Chanpoe2', 15000)
上述示例使用类的名称 Employee 来实例化,并通过
__init__
方法接收参数
访问对象的属性:
可以使用.
来访问对象的属性,例如:
emp1.displayEmployee()
输出结果如下:
Name : Chanpoe , Salary: 20000
可以添加、删除、修改类的属性:
emp1.age = 18 # 添加一个age属性
emp1.age = 19 # 修改age属性
del emp1.age # 删除age属性
也可以用如下函数对类的属性增删改查:
hasattr(emp1, 'age') # 如果存在 'age' 属性返回 True。
getattr(emp1, 'age') # 返回 'age' 属性的值
setattr(emp1, 'age', 22) # 添加属性 'age' 值为 22
delattr(emp1, 'age') # 删除属性 'age'
四、Python内置类属性
__dict__
: 类的属性(包含一个字典,由类的数据属性组成)__doc__
:类的文档字符串__name__
: 类名__module__
: 类定义所在的模块(类的全名是’__main__.className
‘,如果类位于一个导入模块mymod
中,那么className.__module__
等于mymod
)__bases__
: 类的所有父类构成元素(包含了一个由所有父类组成的元组)
五、python对象销毁(垃圾回收)
未完待续