一. 什么是面向对象?

1. 在了解面向对象之前,首先我们需要知道两个概念:
(1)什么是函数?
函数是对功能或动作的一种封装.
函数的语法结构如下:

def func(arg1):
    '''函数的内部有函数体'''
    print("这里是函数内部")

func(arg2)

上面的结构中, func是函数名, arg1是形参, 在函数的内部是函数体. 在定义了函数以后, 我们只需要在下面 用函数名接上一个小括号( func() ) 就可以调用函数了, 小括号内部的 arg2 表示实参.

(2)什么是变量?
在程序设计中, 变量是一个可以存储值的字母或名称, 它是程序运行过程中产生的值, 被用来提供给后面的程序使用.  如 a = 10, 我们把 10 这个值赋给变量 a.

2. 面向过程与面向对象

在了解了以上两个概念以后, 我们现在可以开始讨论什么是面向对象了.

(1)从我们最初接触编程开始, 我们就使用一些关键词, 诸如 if, else, while 等等, 来帮助我们规范程序的逻辑, 按照我们的想法使程序运行下去. 实际上, 这种编程思想就是"面向过程", 我们可以用更加正式的语言来描述面向过程:

面向过程: 一切以事物的流程为核心. 根据业务逻辑(即事物的发展过程, 动作的先后顺序)从上到下写垒代码, 其核心在于"流程(过程)".

优点: 把一个事件步骤化,流程化, 程序编写相对简单.
缺点: 可扩展性差(甚至可以说是极差).

(2)于是我们现在引出一个概念 -- 面向对象.

面向对象: 一切以对象为中心. 对象是属性和动作的集合体. 面向对象就是指对函数进行分类和封装.

优点: 可扩展性强(体现在继承和多态上)
缺点: 编程的复杂程度高于面向过程

简单来说, 最开始接触编程时, 我们的思维,我们的思想是 专注于事物发展过程,动作先后顺序的. 然而, 面向对象却与之截然不同, 这种思维专注于事物这个对象本身, 处于这种思维之下, 可以认为世间万物皆是对象. 我们曾经关注的那些事物的动作和发展顺序, 在面向对象的思维中, 他们都是对象的属性, 于是, 无数包含着各种属性的对象就组成了我们的整个世界.

 

二. 什么是面向对象编程?

1. 类(Class)

类(Class): 用来描述具有相同的属性和方法的对象的集合体. 它定义了该集合体中每个对象所共有的属性和方法. 对象是类的实例.

class Foo:
    pass

# class -- 关键字, 表示创建类
# Foo -- 类名

 

2. 实例化

实例化:创建一个类的实例,类的具体对象

class Foo:

    def __init__(self, property1, property2)
        self.property1 = property1
        self.property2 = property2
 
obj = Foo("属性1", "属性2")
 
# Foo() -- 类的实例化
# obj = Foo() -- 把Foo实例化为obj, obj被称为实例对象(简称为"对象")
# "属性1", "属性2" 分别被传给参数 property1, property2        

 

3. 成员

成员: 在类中定义的变量和方法都被称为成员.
成员分类: 变量, 方法, 属性

class Foo:
    class_variable = "这里是类变量"

    def __init__(self, property):
        """__init__用于初始化一个类"""
        self.property = property
        self.instance_variable = "实例变量"
        """这里的self.xxx都属于实例变量"""

    def instance_method(self):
        """实例方法必须有参数self"""
        print("这里是实例方法")

    @classmethod
    def class_method(cls):
        """类方法必须有参数cls,这里cls传递的是类名Foo"""
        obj = cls("普通属性")
        print("这里是类方法", obj)

    @staticmethod
    def static_method():
        """静态方法对参数没有固定要求,根据实际需要即可"""
        print("这里是静态方法")

    @property
    def dynamic_property(self):
        return "这里是动态属性"
举例说明

相关文章: