python 面向对象基础语法(python代码大全)

网友投稿 214 2022-08-26


python 面向对象基础语法(python代码大全)

仅用学习参考

对象是什么?

目标

​​dir​​ 内置函数定义简单的类(只包含方法)方法中的​​self​​ 参数初始化方法内置方法和属性

01. ​​dir​​ 内置函数

在​​Python​​ 中对象几乎是无所不在的,我们之前学习的变量、数据、函数都是对象

在 ​​Python​​ 中可以使用以下两个方法验证:

在标识符/数据后输入一个​​.​​​,然后按下​​TAB​​​ 键,​​iPython​​ 会提示该对象能够调用的方法列表使用内置函数​​dir​​ 传入标识符/数据,可以查看对象内的所有属性及方法

提示 ​​__方法名__​​​ 格式的方法是 ​​Python​​ 提供的 内置方法 / 属性,稍后会给大家介绍一些常用的 内置方法 / 属性

序号

方法名

类型

作用

01

new

方法

创建对象时,会被 自动 调用

02

init

方法

对象被初始化时,会被 自动 调用

03

del

方法

对象被从内存中销毁前,会被 自动 调用

04

str

方法

返回对象的描述信息,print 函数输出使用

提示 利用好 dir() 函数,在学习时很多内容就不需要死记硬背了

02. 定义简单的类(只包含方法)

面向对象 是 更大 的 封装,在 一个类中 封装 多个方法,这样 通过这个类创建出来的对象,就可以直接调用这些方法了!

2.1 定义只包含方法的类

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

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

方法 的定义格式和之前学习过的函数 几乎一样区别在于第一个参数必须是​​self​​,大家暂时先记住,稍后介绍 ​​self​​

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

2.2 创建对象

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

对象变量 = 类名()

2.3 第一个面向对象程序

需求

小猫 爱 吃 鱼,小猫 要 喝 水分析

class Cat: """这是一个猫类""" def eat(self): print("小猫爱吃鱼") def drink(self): print("小猫在喝水")tom = Cat()tom.drink()tom.eat()

引用概念的强调

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

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

提示:在计算机中,通常使用 十六进制 表示 内存地址十进制和十六进制都是用来表达数字的,只是表示的方式不一样十进制和十六进制的数字之间可以来回转换

​​%d​​ 可以以10 进制输出数字​​%x​​ 可以以16 进制输出数字

案例进阶 —— 使用 Cat 类再创建一个对象

lazy_cat = Cat()lazy_cat.eat()lazy_cat.drink()

提问:​​tom​​​ 和 ​​lazy_cat​​ 是同一个对象吗?

03. 方法中的 ​​self​​ 参数

3.1 案例改造 —— 给对象增加属性

在​​Python​​ 中,要给对象设置属性,非常的容易,但是不推荐使用因为:对象属性的封装应该封装在类的内部只需要在类的外部的代码中直接通过​​.​​ 设置一个属性即可

注意:这种方式虽然简单,但是不推荐使用!

tom.name = "Tom"...lazy_cat.name = "大懒猫"

3.2 使用 ​​self​​ 在方法内部输出每一只猫的名字

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

在类封装的方法内部,​​self​​ 就表示当前调用方法的对象自己调用方法时,程序员不需要传递​​self​​ 参数在方法内部

可以通过​​self.​​访问对象的属性也可以通过​​self.​​调用其他的对象方法

改造代码如下:

class Cat: def eat(self): print("%s 爱吃鱼" % self.name)tom = Cat()tom.name = "Tom"tom.eat()lazy_cat = Cat()lazy_cat.name = "大懒猫"lazy_cat.eat()

在类的外部,通过​​变量名.​​ 访问对象的属性和方法在类封装的方法中,通过​​self.​​ 访问对象的属性和方法

04. 初始化方法

4.1 之前代码存在的问题 —— 在类的外部给对象增加属性

将案例代码进行调整,先调用方法 再设置属性,观察一下执行效果

tom = Cat()tom.drink()tom.eat()tom.name = "Tom"print(tom)

执行如下:

In [7]: class Cat: ...: def eat(self): ...: print("%s 爱吃鱼" % self.name ) ...: In [8]: tom = Cat()In [9]: tom.drink()---------------------------------------------------------------------------AttributeError Traceback (most recent call last) in ()----> 1 tom.drink()AttributeError: Cat instance has no attribute 'drink'In [10]: tom.eat()---------------------------------------------------------------------------AttributeError Traceback (most recent call last) in ()----> 1 tom.eat() in eat(self) 1 class Cat: 2 def eat(self):----> 3 print("%s 爱吃鱼" % self.name ) 4AttributeError: Cat instance has no attribute 'name'In [11]: tom.name = "Tom"In [12]: print(tom)<__main__.Cat instance at 0x0000000006885A48>In [13]:

可以看到上面执行都出现了报错。提示​​Cat​​​类没有 ​​name drink​​等属性。

提示在日常开发中,不推荐在类的外部给对象增加属性如果在运行时,没有找到属性,程序会报错对象应该包含有哪些属性,应该封装在类的内部

4.2 初始化方法 - 构造方法

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

为对象在内存中分配空间—— 创建对象为对象的属性设置初始值—— 初始化方法(​​init​​)

这个初始化方法就是​​__init__​​​ 方法,​​__init__​​ 是对象的内置方法

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

在​​DeadFatBoy​​​ 死肥仔类 中增加​​__init__​​ 方法,验证该方法在创建对象时会被自动调用

In [14]: class DeadFatBoy: ...: def __init__(self): ...: print("这是一个死肥仔类") ...: In [15]:

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

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

In [16]: class DeadFatBoy: ...: def __init__(self): ...: print("这是一个死肥仔类") ...: self.nick = "死肥仔一名" ...: def eat(self): ...: print("%s 爱宅" % self.nick) ...: In [17]: libai = DeadFatBoy()这是一个死肥仔类In [18]: libai.eat()死肥仔一名 爱宅In [19]: In [19]: renfei = DeadFatBoy()这是一个死肥仔类In [20]: renfei.eat()死肥仔一名 爱宅In [21]:

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

在开发中,如果希望在创建对象的同时,就设置对象的属性,可以对​​__init__​​ 方法进行改造

把希望设置的属性值,定义成​​__init__​​ 方法的参数在方法内部使用​​self.属性 = 形参​​ 接收外部传递的参数在创建对象时,使用​​类名(属性1, 属性2...)​​ 调用

In [21]: class DeadFatBoy: ...: def __init__(self,name): ...: print("这是一个死肥仔类") ...: self.nick = "死肥仔一名" ...: self.name = name ...: def eat(self): ...: print("%s 爱宅" % self.nick) ...: In [22]: libai = DeadFatBoy("李白")这是一个死肥仔类In [23]: print(libai.name)李白

05. 内置方法和属性

序号

方法名

类型

作用

01

​__del__​

方法

对象被从内存中销毁前,会被 自动 调用

02

​__str__​

方法

返回对象的描述信息,print 函数输出使用

5.1 ​​__del__​​ 方法

在​​Python​​ 中

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

应用场景​​__init__​​ 改造初始化方法,可以让创建对象更加灵活​​__del__​​​ 如果希望在对象被销毁前,再做一些事情,可以考虑一下​​__del__​​ 方法生命周期

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

In [24]: class DeadFatBoy: ...: def __init__(self,name): ...: print("这是一个死肥仔类") ...: self.nick = "死肥仔一名" ...: self.name = name ...: def eat(self): ...: print("%s 爱宅" % self.nick) ...: def __del__(self): ...: print("%s 被销毁咯" % self.name) ...: In [25]: libai = DeadFatBoy("李白")这是一个死肥仔类In [26]: del libai李白 被销毁咯In [27]:

5.2 ​​__str__​​ 方法

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

注意:​​__str__​​ 方法必须返回一个字符串

## 没有使用 __str__ 方法之前,默认返回内存地址In [12]: print(tom)<__main__.Cat instance at 0x0000000006885A48>## 使用 __str__ 自定义 print(类) 的返回信息In [27]: class DeadFatBoy: ...: def __init__(self,name): ...: print("这是一个死肥仔类") ...: self.nick = "死肥仔一名" ...: self.name = name ...: def eat(self): ...: print("%s 爱宅" % self.nick) ...: def __del__(self): ...: print("%s 被销毁咯" % self.name) ...: def __str__(self): ...: return "%s 是一个小肥仔" % self.name ...: In [28]: libai = DeadFatBoy("李白")这是一个死肥仔类In [29]: print(libai)李白 是一个小肥仔In [30]:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python 异常 try except(python入门教程(非常详细))
下一篇:Python 操作文件(python培训)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~