Python面向对象:闭包

闭包

  • 一、定义类
  • 二、创建和调用对象成员
  • 三、使用属性
    • 1、添加新属性
    • 2、获取属性值
    • 3、修改新属性
    • 4、删除属性
    • 5、判断属性是否存在或者属性是否有值
    • 6、查看对象或类的所有属性和方法
  • 四、定义和调用方法
  • 五、self
  • 六、编程练习

一、定义类

Python中的数据类型都是类,类是组成P突然红程序的基本要素,它封装了一类对象的数据操作。

  • 定义类
    在这里插入图片描述

class是什么类的关键字
“类名”是自定义的类名,采用大驼峰法命名。

二、创建和调用对象成员

  • 创建对象:通过类创建对象的过程称为实例化。

语法 :
引用对象的变量名 = 类名([参数列表])

示例:
iphone = Phone()
pint(iphone)

结果:
<main.Phone object at 0x0000026A5F9CD808>

对象必须通过类创建获得,对象是一个具体的实实在在存在的事物,是数据和功能的集合。数据称之为对象的属性,功能称之为对象的方法。

  • 访问对象成员

语法:
对象引用.成员

三、使用属性

1、添加新属性

语法:
对象.新属性名称 = 属性值

  • 示例:
iphone.color = "土豪金"
iphone.brand = "华为"

2、获取属性值

语法:
对象.属性名称

print(iphone.color)
pring(iphone.brand)
#print(iphone.size) #不注释会报错,不能获取一个不存在的属性

结果:
土豪金
华为

3、修改新属性

语法:
对象.属性名称 = 新值

  • 示例
iphone.color = "亮黑"

4、删除属性

语法:
del 对象.属性名称

  • 示例
del iphone.brand # 删除属性
#del iPhone.price # 不注释会报错,删除一个不存在的属性
print(iphone.color)
print(iphone.brand) # 不注释会报错,该属性已被删除

结果:
亮黑

5、判断属性是否存在或者属性是否有值

语法:
hasattr(对象,“属性名称”)
返回值为bool型,返回True, 不存在返回False

  • 示例
print(hasattr(iphone, 'color'))
print(hasattr(iphone, 'brand'))
print(hasattr(iphone, 'price'))

结果:
True
False
False

6、查看对象或类的所有属性和方法

语法:
dir(对象名或类名)

  • 示例
print(dir(Phone)) # 打印类的属性和方法
print(dir(iphone)) # 打印对象的属性和方法
print(type(iphone)) # 打印对象的类型

结果
……
……,‘color’
<class ‘main.Phone’>

  • 完整实例
class Phone: #定义类pass
iphone = Phone() #创建对象
iphone.color = '土豪金' #添加属性
iphone.brand = ""
print(iphone.color)
print(iphone.brand)
#print(iphone.size) #不注释会报错,获取一个不存在的尺寸属性
iphone.color = "亮黑"
del iphone.brand # 删除属性
#print(iphone.brand)# 不注释会报错,该属性已被删除
#del iphone.price # 删除一个不存在的属性
print(hasattr(iphone,'color'))#判断iphone对象中是否存在color属性
print(hasattr(iphone, 'brand'))#判断iphone对象中是否存在brand属性
print(hasattr(iphone, 'price'))#判断iphone对象中是否存在price属性print(dir(Phone)) # 打印类的属性和方法
print(dir(iphone)) # 打印对象的属性和方法
print(type(iphone)) # 打印对象的类型

四、定义和调用方法

  • 调用方法

语法:
对象.方法名([实参列表])

虽然定义方法时设置第一个参数为self,但是调用方法时不要传递对应的self参数。方法可以被多次调用。

  • 示例
# 创建对象
、iphone = Phone()
iphone.color = "土豪金"
iphone。brand = "华为"
# 调用方法
iphone.call() #调用call()
iphone.sendMsg() #调用sendMsg()

结果:
——打电话——,手机颜色为:土豪金
——发短信——,手机品牌为:华为

五、self

当某个对象调用其方法的时候,不需要传递self对象的实参。因为python解释器(环境)会自动将这个对象作为第一个实际参数传递给方法,所以开发者只需要在定义方法时“预留”第一个参数为self即可。

类的对象方法中存在的这个特色关键字self,标识当前对象,即调用该方法的对象。

在对象方法中可以通过self获取到调用该方法的对象,从而可以通过self操作对象上的属性和方法。

利用self可以在方法中给对象帝国一属性

六、编程练习

在这里插入图片描述

  • 代码:
def cheers(a=0, b=0):x = ay = bdef move(i, j):nonlocal x, y # 内部函数声明需要调用外部变量x += iy += jprint("当前坐标{},{}".format(x, y))return movech = cheers(0, 0)
ch(1, 1)
ch(1, 3)

运行结果
当前坐标1,1
当前坐标2,4

  • 较人性化一点的程序
chess = [0, 0]
ct = True
x, y = map(int, input().split())def move():chess[0] += xchess[1] += yprint(f"当前棋子所在位置{chess}")
move()
while ct:c = input("是否继续y/n:")if c == "y":x, y = map(int, input().split())move()else:print(f"棋子最终位置{chess}")break
  • 可自由进行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1383249.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

CH3-面向对象上 (4个案例实现)

【案例3-1】基于控制台的购书系统 【案例介绍】 案例描述 ​ 伴随互联网的蓬勃发展&#xff0c;网络购书系统作为电子商务的一种形式&#xff0c;正以其高效、低成本的优势逐步成为新兴的经营模式&#xff0c;人们已经不再满足互联网的用途仅仅局限于信息的浏览和发布&#…

Java面向对象程序设计(OOP)

1、面向对象程序设计(OOP) 1.1、面向过程&面向对象 面向过程编程&#xff08;Procedure Oriented Programming&#xff0c;POP&#xff09; 步骤清晰简单&#xff0c;第一步做什么&#xff0c;第二步做什么…&#xff08;线性思维&#xff09;是以功能&#xff08;函数&a…

C++面向对象程序设计之字符串类的相关操作

C面向对象程序设计之字符串类的相关操作 1.实验任务与要求&#xff1a; 1&#xff09;编写一个表示字符串的类String。 2&#xff09;改写默认构造函数&#xff0c;生成一个空串&#xff0c;&#xff08;不分配内存&#xff09;。 3&#xff09;添加一个带参数的构造函数&…

CH4-面向对象下 (8个案例实现)

【案例4-1】打印不同的图形 【案例介绍】 1. 案例描述 ​ 本案例要求编写一个程序&#xff0c;可以根据用户要求在控制台打印出不同的图形。例如&#xff0c;用户自定义半径的圆形和用户自定义边长的正方形。 2. 运行结果 【案例目标】 学会“抽象类实现不同图形的打印程序…

22、Java面向对象——String类

目录 课前先导 一、String类 1、string类 2、字符串的特点 3、String类中的构造方法 4、String类对象的特点 5、字符串的比较 6、获取字符串中的字符 7、获取字符串的长度 二、字符串对象的练习 1、遍历字符串 2、统计字符串中的字符 3、拼接字符串 4、字符串反…

Java实验四 深入面向对象

实验四 深入面向对象 一、实验目的与要求 1、深刻理解面向对象的三大特征&#xff1b; 2、熟练掌握关键super、final的含义及用法&#xff1b; 3、理解什么是抽象类、抽象方法&#xff0c;以及两者间的关系&#xff1b; 4、深刻理解接口的概念、作用&#xff0c;以及与抽…

java面向对象编程实例讲解_Java面向对象编程实例详解

Java是一种面向对象的语言&#xff0c;是实现面向对象编程的强大工具。但如何在编程中实际运用并发挥其最大效能呢&#xff1f;本文通过一个实际Java程序的开发过程&#xff0c;详细说明了如何使用面向对象实现Java编程。 我们要实现的Java应用程序是&#xff1a;当用户输入一个…

高端百度地图开发2:自定义水滴头像(鼠标事件、API封装对接)

高端百度地图开发系列 高端百度地图开发1&#xff1a;自定义水滴头像&#xff08;自定义标注覆盖物、Overlay覆盖类&#xff09; 自定义水滴头像之鼠标事件、API封装对接 高端百度地图开发系列一、添加自定义覆盖物的方法二、对接API数据1.获取API数据(模拟)2.遍历数据3.添加自…

2023年中国智慧公安行业发展现况及发展趋势分析:数据化建设的覆盖范围不断扩大[图]

智慧公安基于互联网、物联网、云计算、智能引擎、视频技术、数据挖掘、知识管理为技术支撑&#xff0c;公安信息化为核心&#xff0c;通过互联互通、物联化、智能方式促进公安系统各功能模块的高度集成、协同作战实现警务信息化“强度整合、高度共享、深度应用”警察发展的新概…

写一个简单炫酷的app程序的打开动画

app也是有颜值&#xff0c;动画就是一种化妆术&#xff0c;他让你的app更加炫酷&#xff0c;首先给你看下图 首先呢&#xff0c;先普及下总体的框架知识&#xff0c;有三种动画 (1)Drawable Animation&#xff1a;逐帧动画&#xff0c;就像电影一样&#xff0c;一帧一帧&am…

安卓开机动画的制作

开机动画的存储位置&#xff1a; system/media/bootanimation.zip。 bootanimation.zip的文件结构&#xff1a;包含一个desc.txt和N个文件夹&#xff08;一般两个&#xff09;。desc.txt是用来指导如何执行动画页面。文件夹里存放要播放的照片&#xff08;支持png和jpg格式&am…

安卓基础动画

在开发的过程中&#xff0c;动画可以实现很好的效果&#xff0c;比如对于图片的旋转&#xff0c;电子罗盘的都可以利用动画来时实现。但是对于动画不太熟悉&#xff0c;经常想用却不会用&#xff0c;特地写这篇博客&#xff0c;记录一下对于动画的学习。 主要学习帧动画和Objec…

安卓动画:

Android的三种动画&#xff0c;即&#xff1a; •View Animation&#xff08;视图动画&#xff09; •Drawable Animation&#xff08;帧动画&#xff09; •Property Animation&#xff08;属性动画&#xff09; Drawable Animation&#xff08;帧动画&#xff09;&#xff1…

安卓手机开机动画制作原理教程

先说开机动画实现原理&#xff1a; Android的动画是由一系列的连续PNG图片作为帧组成的动画形式。 不是合成为一张GIF图片&#xff0c;而是一个文件包&#xff0c;将各帧PNG图片以压缩方式保存。 这个保存的文件名就是bootanimation.zip&#xff0c;这个文件是zip压缩文件&a…

安卓之动画制作

1.知识图谱 &#xff08;补间动画和帧动画&#xff09; 1.补间动画的效果图&#xff1a; &#xff08;alpha透明度&#xff09; &#xff08;ratate旋转&#xff09; XML代码&#xf…

Android BT

整个bluedroid可以分为两大模块&#xff1a;BTIF&#xff0c;BTE BTIF&#xff1a;提供bluedroid对外的接口;作为bluedroid与上层的framework提供interface。所以它处于bluedroid的顶层。 BTE&#xff1a;bluedroid的内部处理&#xff0c;又细分为BTA&#xff0c;BTU&#xf…

04.BT下载

04.BT下载 下载&#xff0c;是很多网络用户必备的需求之一。以往我们使用现成工具迅雷&#xff0c;我们必须保持开机&#xff0c;会员&#xff0c;合法等等要求&#xff0c;但是依托服务器&#xff0c;我们其实也可以搭建BT下载工具&#xff0c;只要你的硬盘够用&#xff0c;把…

BackTrack5(BT5)各版本下载

BT5R3(最新版本)http://www.nigesb.com/backtrack-5-r3-released.html BT5R2 KDE版32位&#xff1a; http://ftp.halifax.rwth-aachen.de/backtrack/BT5R2-KDE-32.iso GNOME32位&#xff1a;http://ftp.halifax.rwth-aachen.de/backtrack/BT5R2-GNOME-32.iso BT5R1 KDE版32位…

mysql 存储用户头像_node+vue用户头像处理上传并保存

2017年7月14日19:21:29 &#xff0c;最近做个网站&#xff0c;需要有用户头像裁剪上传功能&#xff0c;具体流程是用户在本地选择图片&#xff0c;前端将图片裁剪好发给后端&#xff0c;后端接收到图片将它保存起来&#xff0c;并将信息存入数据库。 先说一下环境后端是express…

java 根据用户名生成头像。

先上效果图 自行根据需求修改代码 package com.space; import java.awt.*; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Random; import java.util.regex.Matcher; im…