您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

Pyhton面向对象基础语法

时间:2019-08-15 10:18:41  来源:  作者:

目标

dir 内置函数

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

方法中的 self 参数

初始化方法

内置方法和属性

01. dir 内置函数(知道)

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

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

在 标识符 / 数据 后输入一个 .,然后按下 TAB 键,iPython 会提示该对象能够调用的 方法列表

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

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

Pyhton面向对象基础语法

 

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

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

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

2.1 定义只包含方法的类

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

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

方法 的定义格式和之前学习过的函数 几乎一样

区别在于第一个参数必须是 self,大家暂时先记住,稍后介绍 self

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

2.2 创建对象

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

对象变量 = 类名()

2.3 第一个面向对象程序

需求

小猫 爱 吃 鱼,小猫 要 喝 水

分析

定义一个猫类 Cat

定义两个方法 eat 和 drink

按照需求 —— 不需要定义属性

Pyhton面向对象基础语法

 

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()

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()
Pyhton面向对象基础语法

 

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

在 类封装的方法中,通过 self. 访问对象的 属性和方法

04. 初始化方法

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

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

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

程序执行报错如下:

AttributeError: 'Cat' object has no attribute 'name'
属性错误:'Cat' 对象没有 'name' 属性

提示

在日常开发中,不推荐在 类的外部 给对象增加属性

如果在运行时,没有找到属性,程序会报错

对象应该包含有哪些属性,应该 封装在类的内部

4.2 初始化方法

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

为对象在内存中 分配空间 —— 创建对象

为对象的属性 设置初始值 —— 初始化方法(init)

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

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

在 Cat 中增加 init 方法,验证该方法在创建对象时会被自动调用

class Cat:
 """这是一个猫类"""
 def __init__(self):
 print("初始化方法")

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

在 init 方法内部使用 self.属性名 = 属性的初始值 就可以 定义属性

定义属性之后,再使用 Cat 类创建的对象,都会拥有该属性

class Cat:
 def __init__(self):
 print("这是一个初始化方法")
 
 # 定义用 Cat 类创建的猫对象都有一个 name 的属性
 self.name = "Tom"
 def eat(self):
 print("%s 爱吃鱼" % self.name)
# 使用类名()创建对象的时候,会自动调用初始化方法 __init__
tom = Cat()
tom.eat()

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

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

把希望设置的属性值,定义成 init 方法的参数

在方法内部使用 self.属性 = 形参 接收外部传递的参数

在创建对象时,使用 类名(属性1, 属性2…) 调用

class Cat:
 def __init__(self, name):
 print("初始化方法 %s" % name)
 self.name = name
 ...
 
tom = Cat("Tom")
...
lazy_cat = Cat("大懒猫")
...

05. 内置方法和属性

Pyhton面向对象基础语法

 

5.1 del 方法(知道)

在 Python 中

当使用 类名() 创建对象时,为对象 分配完空间后,自动 调用 init 方法

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

应用场景

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

del 如果希望在对象被销毁前,再做一些事情,可以考虑一下 del 方法

生命周期

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

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

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

class Cat:

class Cat:
 def __init__(self, new_name):
 self.name = new_name
 print("%s 来了" % self.name)
 def __del__(self):
 print("%s 去了" % self.name)
# tom 是一个全局变量
tom = Cat("Tom")
print(tom.name)
# del 关键字可以删除一个对象
del tom
print("-" * 50)

5.2 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)


Tags:Pyhton   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
闭包1. 函数引用def test1(): print("--- in test1 func----")# 调用函数test1()# 引用函数ret = test1print(id(ret))print(id(test1))#通过引用调用函数ret()运行结果:-...【详细内容】
2019-09-10  Tags: Pyhton  点击:(119)  评论:(0)  加入收藏
同步的概念同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。"同"字从字面上容易理解为一起动作其实不是,"同"字应是指协同、协助、互相配合。如进程、线程同步,...【详细内容】
2019-08-27  Tags: Pyhton  点击:(204)  评论:(0)  加入收藏
目标dir 内置函数定义简单的类(只包含方法)方法中的 self 参数初始化方法内置方法和属性01. dir 内置函数(知道)在 Python 中 对象几乎是无所不在的,我们之前学习的 变量、数据、...【详细内容】
2019-08-15  Tags: Pyhton  点击:(195)  评论:(0)  加入收藏
▌简易百科推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  菜鸟学python    Tags:Python4   点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  风度翩翩的Python    Tags:Python   点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(4)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(9)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(8)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条