包虫病

注册

 

发新话题 回复该主题

Python白银时代面向对象 [复制链接]

1#
基本概念

面向过程

是早期的一个编程概念,类似函数,但是没有返回值

具体做法:

把完成某个需求的所有步骤,从头到尾逐步实现

将某些功能独立的代码封装成一个又一个函数

然后顺序调用不同的函数

特点:

注重步骤与过程,不注重职责分工

如果需求复杂,代码会变得很复杂

开发复杂项目,没有固定的套路,开发难度大

面向对象

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

在完成某个需求前,首选确定职责,根据职责确定不同的对象,在对象内部封装不同的方法

最后让不同的对象调用不同的方法

特点:

注重对象和职责,不同的对象承担不同的职责

更加适合对应复杂的需求变化,专门应对复杂项目开发,提供固定套路

类和对象

类和对象是面向对象的两个核心概念

在程序开发中,先有类,后有对象

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

特征即属性

行为即方法(函数)

类相当于做汽车的图纸,是一个模板,而根据这个模板做出来的具体物品就是对象

三要素

类名这类事物的名字,使用大驼峰命名法(HelloWorld)

属性指这类事物的特征

方法指这类事物具备的行为

对象

对象是根据类创建出来的一个具体存在,可以直接使用

根据类创建出来的对象,具备与类相同的属性和方法

类和对象的关系

类是模板,对象是根据类这个模板创建出来的,先有类,后有对象

类只有一个,根据这个类创建的对象可以有多个

不同的对象之间,属性可能会各有不同

类中定义了什么样的属性和方法,对象中就是什么样的属性与方法

基础语法

dir内置函数

在Python中,对象几乎无所不在,变更、数据、函数都是对象

使用内置函数dir传入标识符/数据,可以查看对象内的所有属性和方法

__方法名__格式的方法是Python提供的内置方法/属性

常见方法如下

方法名类型作用__new__方法创建对象时,会被自动调用__init__方法对象被初始化时,会被自动调用__del__方法对象被从内存中销毁时,会被自动调用__str__方法返回对象的描述信息,print函数输出使用

示例

#定义函数,测试内置方法defdemo():passprint(dir(demo))

输出结果

定义简单类

面向对象是更大的封装,在一个类中封装多个方法,通过这个类创建的对象可以直接使用这些方法

类中方法的定义,与之前定义函数时,几乎一样,区别在于每一个参数必须是self,self表示调用者本身的引用

调用中对象中的方法时,self不需要传递

可以通过self调用对象的其它属性或方法

示例

"""需求:定义一个狗类,狗有吃骨头,睡觉两个方法"""classDog第一个参数必须是self,表示调用者本身的引用defeat(self):print("狗狗要吃骨头了...")defsleep(self):print("狗狗要睡觉了...")#定义对象调用方法dog=Dog()dog.eat()dog.sleep()#定义第二个狗对象dog2=Dog()dog2.eat()dog2.sleep()#dog和dog2是用同一个类创建出来的,里面的方法和属性是一样的,但是对象的引用是不同的print(dog)print(dog2)

输出结果

对象的初始化

当使用类名()创建对象时,会自动执行以下操作

为对象分配内存空间

为对象的属性设置初始值(即调用__init__方法)

__init__是对象的内置方法,专门用来定义一个类具有哪些属性的方法

示例

classDogef__init__(self,name):print("开始初始化Dog的属性...")self.name=namedefeat(self):print("%s开始吃骨头了..."%self.name)defsleep(self):print("%s想要睡觉了..."%self.name)#定义对象,并为其属性赋值dog=Dog("小白")dog.eat()dog.sleep()dog2=Dog("小黑")dog2.eat()dog2.sleep()

输出结果

内置方法

__del__方法:当一个对象被从内存中销毁时,会自动调用

应用场景

__init__改造初始化方法,可以让对象更加灵活

__del__如果希望对象在被销毁前,再做一些事情,可以使用此方法

生命周期

一个对象从调用类名()创建,生命周期开始

一个对象的__del__方法一旦被调用,生命周期结束

在对象的生命周期内,可以访问对象属性,或者调用对象方法

__str__方法:默认打印对象变量的引用内存地址值,如果希望使用print输出对象变量时,能够打印自定义的内容,就可以利用__str__方法,该方法必须返回一个字符串

示例

classDogef__del__(self):print("小黑去轮回了......")def__str__(self):return"我是小黑的自定义打印内容。。。"dog=Dog()print(dog)print("---------------")

输出结果

程序猿知秋

分享 转发
TOP
发新话题 回复该主题