面向对象编程(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的编程典范,同时也是一种程序开发的抽象方针。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。
我们之前学习的编程方式就是面向过程的,面相过程和面相对象,是两种不同的编程方式,对比面向过程的特点,可以更好地了解什么是面向对象。
注重步骤与过程,不注重职责分工
如果需求复杂,代码会变得很复杂
开发复杂项目,没有固定的套路,开发难度很大!
{{< admonition tip “提示” true >}}
相比较函数,类是更大的封装,根据职责在一个对象中封装多个方法。在完成某一个需求前,首先确定职责要做的事情(方法),根据职责确定不同的对象,在对象内部封装不同的方法(多个)。最后完成的代码,就是顺序地让不同的对象调用不同的方法
{{< /admonition >}}
类是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用。特征被称为属性,行为被称为方法。
对象是由类创建出来的一个具体存在,可以直接使用。由哪一个类创建出来的对象,就拥有在哪一个类中定义的属性和方法。
类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象。类只有一个,而对象可以有很多个。不同的对象之间属性可能会各不相同。类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多,也不可能少。
在使用面相对象开发前,应该首先分析需求,确定一下,程序中需要包含哪些类!
在程序开发中,要设计一个类,通常需要满足一下三个要素:
{{< admonition tip “提示” true >}}
大驼峰命名法:每一个单词的首字母大写且单词与单词之间没有下划线,如ClassName
。
{{< /admonition >}}
名词提炼法分析整个业务流程,出现的名词,通常就是找到的类
{{< admonition tip “提示” true >}}
需求中没有涉及的属性或者方法在设计类时,不需要考虑
{{< /admonition >}}
定义一个只包含方法的类语法格式如下:
class 类名:
def 方法1(self, 参数列表):
pass
def 方法2(self, 参数列表):
pass
{{< admonition tip “提示” true >}}
方法的定义格式和之前学习过的函数几乎一样,区别在于第一个参数必须是self
,暂时先记住,稍后介绍 self
{{< /admonition >}}
当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:
对象变量 = 类名()
self
参数由哪一个对象调用的方法,方法内的 self
就是哪一个对象的引用
{{< admonition tip “提示” true >}}
在面向对象开发中,引用的概念是同样适用的。使用类创建对象之后,对象的变量中仍然记录的是对象在内存中的地址,也就是对象的变量引用了新建的类对象。使用 print
输出对象变量,默认情况下,是能够输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中的地址(十六进制表示)
{{< /admonition >}}
在类封装的方法内部,self
就表示当前调用方法的对象自己。调用方法时,程序员不需要传递self
参数。
在方法内部,可以通过 self.
访问对象的属性,也可以通过 self.
调用其他的对象方法。
在类的外部,通过 变量名.
访问对象的属性和方法,在类封装的方法中,通过 self.
访问对象的属性和方法。
当使用 类名()
创建对象时,会自动执行以下操作:
init
){{< admonition tip “提示” true >}}
初始化方法就是 __init__
方法,__init__
是对象的内置方法,__init__
方法是 专门用来定义一个类具有哪些属性的方法
{{< /admonition >}}
在 __init__
方法内部使用 self.属性名 = 属性的初始值
就可以定义属性,定义属性之后,再使用类创建的对象,都会拥有该属性。
__del__
方法当使用 类名()
创建对象时,为对象分配完空间后,自动调用 __init__
方法,当一个对象被从内存中销毁前,会自动调用 __del__
方法。
{{< admonition tip “提示” true >}}
__init__
改造初始化方法,可以让创建对象更加灵活,__del__
如果希望在对象被销毁前,再做一些事情,可以考虑一下 __del__
方法
{{< /admonition >}}
{{< admonition tip “提示” true >}}
对象的生命周期,一个对象从调用 类名()
创建,生命周期开始,一个对象的 __del__
方法一旦被调用,生命周期结束,在对象的生命周期内,可以访问对象属性,或者让对象调用方法。
{{< /admonition >}}
__str__
方法如果在开发中,希望使用 print
输出对象变量时,能够打印自定义的内容,就可以利用__str__
这个内置方法了
{{< admonition tip “提示” true >}}
__str__
方法必须返回一个字符串
{{< /admonition >}}