闭包
- 一、定义类
- 二、创建和调用对象成员
- 三、使用属性
- 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
- 可自由进行