Python 面向对象编程


前言:

  • 面向对象(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对象销毁(垃圾回收)

未完待续

参考文章:

面向对象(CSDN)

Python 面向对象(菜鸟教程)


  目录