python———面向对象程序设计

面向对象

相比较于函数,面向对象更大封装,根据职责在一个对象中封装多个方法

1.在完成某一个需求前,首先要确定职责——就是要做的事情(方法)
2.根据职责确定不同的对象,在对象内部封装不同的方法
3.最后完成的代码,就是顺序地让不同的对象调用不同的方法

特点

1.注重对象和职责,不同的对象承担不同的职责
2.更加适应对复杂的需求变化,是专门对复杂项目的开发,提供固定的套路

类和对象

对象 是面向对象编程的 两个 核心概念

是对一群具有相同特征行为 的事物的统称, 是抽象的, 不能直接使用

特征被称为属性
行为被称为方法

相当于一个模板,是负责创建对象

在程序开发中,要设计一个类,通常需要满足以下三个要素:

 1.类名这类事物的名字需要满足 大驼峰命名法
 2.属性这类事物具有什么样的特征
 3.方法这类事物具有什么样的行为

大驼峰命名法

1.首先每一个单词的首字母大写
2.单词与单词之间没有下划线

类名的确定

名词提炼法 分析 整个业务流程, 出现的 名词, 通常就是找到的类

属性和方法的确定

对 对象的特征描述,通常可以定义为属性
对象具有的行为(动词),通常可以定义为方法

**提示:**需求中没有涉及的需求或方法在设计类时,不需要考虑

dir内置函数

python———面向对象程序设计_第1张图片
定义只包含方法的类

在python中要定义一个只包含方法的类,语法格式如下:

class 类名:
	def 方法1(self, 参数列表):
		pass
	def 方法2(self, 参数列表):
		pass

方法的定义格式和之前学习的函数 几乎一样
区别在于第一个函数必须是 self,

**注意:**类名的命名规则要符合大驼峰命名法

创建对象

当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:

对象变量 = 类名()

引用概念的强调

在面向对象开发时, 引用的概念是同样适用的

在 python 使用类创建对象之后,变量中仍然记录的是 对象在内存中的地址
也就是变量引用了新建的猫对象
使用 print 输出变量对象,默认情况下,是能够输出这个变量 引用的对象 是 有哪一个类创建的对象, 以及 在内存中地址(十六进制数表示)

使用 self 方法

由 哪一个对象 调用的方法, 方法内的 self 就是哪一个对象的引用

在类封装的方法内部, self 就表示 当前调用方法的对象自己
调用方法时, 程序员不需要传递 self 参数
在方法内部
可以通过 self. 访问对象的属性
也可以通过 self. 调用其他的对象方法

初始化方法

当使用 **类名()**创建对象时,会自动执行以下操作:
1.为对象在内存中 分配空间——创建对象
2.为对象的属性 设置初始值——初始化方法(init)

这个初始化方法就是 __init __方法,__init __就是对象的内置方法

__init __方法是专门用来定义一个类 具有哪些属性的方法!!!

在初始化方法内部定义属性

在 __ init__方法内部使用 self.属性名 = 属性的初始值 就可以定义属性
定义属性之后,在使用类创建对象,都会拥有该属性

改造初始化方法——初始化的同时设置初始值

在开发中,如果希望在创建对象的同时,就设置对象的属性,可以对__init __方法进行改造
1.把希望设置的初始值定义为__init __方法的参数
2.在方法内部使用 self.属性 = 形参 接收外部传递的参数
3.在创建对象时,使用 **类名(属性1, 属性2…)**调用

内置方法和属性

序号 方法名 类型 作用
01 __del __ 方法 对象被从内存中销毁前,会自动调用
02 __str __ 方法 返回对象的描述信息,print 函数输出使用

__del __方法

在 python 中
使用 类名()创建对象时,为对象分配完空间后,会自动调用__init __ 方法
当一个对象被从内存中销毁前,会自动调用 __del __方法

生命周期
一个对象从调用 类名() 创建,生命周期开始
一个对象的 __del __方法一旦被调用,生命周期结束
在对象的生命周期内,可以访问对象属性,或者让对象调用方法

__str __方法

在 python 中,使用 print 输出对象变量,默认情况下,会输出这个变量是由哪一个类创建的对象,以及在内存中的地址(十六进制表示)
如果在开发中,希望使用 print 输出变量使用时,能够打印自定的内容,就可以利用 __str __ 这个内置方法了

注意:__str __ 方法必须返回一个字符串

例:

class Cat:
    def __init__(self, new_name):
        self.name = new_name
        print("% s 来了" % self.name)

    def __del__(self):
        print("% s 走了" % self.name)

    def __str__(self):
        return "我是小猫 % s" % self.name


tom = Cat("Tom")
print(tom)

封装

1.封装是面向对象编程的一大特点
2.面向对象编程的第一步——将 属性方法 封装到一个抽象的
3.外界使用类创建对象,然后让对象调用方法
4.对象方法的细节都被封装在类的内部

提示:
1.在对象的方法内部,是可以直接访问对象的属性的
2.同一个类中创建的多个对象之间,属性互不干扰

定义没有初始值的属性

在定义属性时,如果不知道设置什么初始值,就可以设置为 None

None关键字表示什么也没有
表示一个空对象没有方法和属性,是一个特殊的常量
可以将None赋值给任何一个变量

身份运算符

身份运算符用来比较两个对象的 内存地址 是否一致——是否对同一个对象的引用

在python中针对None比较时,建议使用is判断

运算符 描述 实例
is is 是判断两个标识符是不是引用同一个对象 x is y,类似于id(x)== id(y)
is not is not是判断两个标识符是不是引用不同对象 x is not y,类似于id(x)!= id(y)

is 与 == 区别

is 用于判断 两个变量 引用对象是否为同一个
== 用于判断 引用变量的值 是否相同

你可能感兴趣的:(python,开发语言)