1.pygame应用
标准程序走一遍···
import pygame
# 1.初始化pygame
pygame.init()
# 2.创建游戏窗口
# set_mode((宽度,高度))
screen = pygame.display.set_mode((1024, 600))
# 3.游戏循环(死循环)
while True:
# 检测事件
for event in pygame.event.get():
# 检测窗口上的关闭按钮是否被点击
if event.type == pygame.QUIT:
# 退出游戏
print('关闭按钮被点击')
exit()
2.面向对象
什么是类:
对拥有相同属性和功能的对象的封装
类是抽象
类中相同的属性的值是不能确定的
什么是对象:
对象就是类的实例
对象是具体
对象的属性是确定的
a.怎么声明类
class 类名(父类):
类的说明
属性
方法
b.通过类创建对象
对象名 = 类名() --> 构造方法
调用构造方法创建对象的时候,会自动调用类的init方法,来给对象的属性赋初值
c.__init__方法
不用自己调用;参数有哪些,参数需不需要默认值,全看在创建对象的时候是否需要给相应的属性赋初值和是否必须赋初值
d.关于属性
对象属性:(对象属性,不同的对象对应的值可能不一样,这样的属性可以声明成对象属性)
对象来使用
增删改(查)
- 查(获取属性)
方法一:对象.属性 (如果属性不存在,会报错)
方法二:对象.__ getattribute __ (属性名) 和 getattr(对象, 属性名, 默认值)
!!如果设置了默认值,那么当属性不存在的时候不会报错,并且返回默认值。 - 改(修改属性的值)
方法一: 对象.属性 = 新值
方法二:对象.__ setattr (属性名,新值) 和 setattr(对象,属性名,新值) - 增加(增加对象属性)
对象.属性 = 值(属性不存在)
注意:属性是添加给对象的,而不是类的 - 删(删除对象的属性)
方法一: del 对象.属性
方法二:对象. delatter __(属性名)
注意:删除属性也是删的具体某个对象的属性。不会影响这个类的其他对象
__slots__:一旦给类设置了这个属性的值,对象的__dict__属性就没有用了
内置类属性(对象\类.__dict__,
类.__name__(获取类的类名),
对象.__class__(获取对象属于哪个类),
类.__doc__,
类.__base__(类的父类, 返回的是列表))
私有属性和假的私有属性
getter\setter : 想要在获取对象属性的值前,或者是给属性赋值前干点别的事情
@property
def 属性名(self):
return 值
@属性名.setter
def 属性名(self, value):
self.属性 = value
e.类的方法
对象方法:
自带一个self参数,一般要通过对象去调用
类方法:
1.使用@classmethod修饰
2.自带一个cls参数,并且这个参数不用传参,谁来调用这个方法,cls就指向谁
3.类方法要通过类来调用
静态方法:
1.使用@staticmethod修饰
2.没有默认参数
3.静态方法要通过类来调用
f.继承(支持多继承,但是一般不使用)
让子类直接拥有父类的所有的属性和方法(私有的除外), __storts__值不会被继承
重写:(多态)
继承后,子类可以拥有除父类继承的内容以外的其他的内容
关于方法
1).在子类中可以直接添加其他的方法
2).重写:
a.完全重写
重新实现从父类继承下来的方法,重写后,子类再调用这个方法的时候,就调用子类的
b.保留父类实现的功能,再添加新的功能
对象和类调用方法的过程:先看当前类是否存在这个方法,没有才看父类有没有这个方法;
如果父类没有就看父类的父类有没有,直到找到基类(object)为止
运算符重载
1.重载:一个类中可以有多个名字相同的方法,但是参数不一样,就叫重载。python中不支持
2.运算符重载(重新定义运算符运算的过程)
大于和小于符号只需要重载其中的一个,另外一个的结果,直接是重的结果取反
def __gt__(self, other):
# 比较对象1>对象2的时候是比较的他们的height属性
return self.height > other.height
# return self.age > other.age
# return id(self) > id(other)
# 重载:<
def __lt__(self, other):
return self.age < other.age
# 重载: +
def __add__(self, other):
return self.age + other.age
# 重载: -
def __sub__(self, other):
return self.height - other.height
3.正则表达式
a.符号(. \w \d \s \b \W \D \S \B [] [^] + * ? {N} {N,} {N,M} () | 等)
b.re模块中的方法:匹配、查找、切割、替换
# 1.compile(正则字符串) 将正则表达式字符串转换成正则表达式对象
# 转换成正则表达式对象后,可以通过对象调用相关的方法
re_obct = re.compile(r'\w{6,12}')
print(re_obct.fullmatch('user_234'))
print(re.fullmatch(r'\w{6,12}', 'user_234'))
# 2.fullmatch(正则表达式, 字符串) 完全匹配,从字符串开头匹配到结尾
# 返回值是匹配对象,如果不成功返回None
match = re.fullmatch('\w{3}', 'h3s')
print(match)
# a.获取匹配到的结果
print(match.group())
# b.获取匹配到的范围
print(match.span())
# c.获取匹配到的开始下标和结束下标
print(match.start(), match.end())
# d.获取被匹配的字符串(原字符串)
print(match.string)
# 应用:判断一个字符串是否是某种字符串(判断账号、密码是否符合要求等)
# 3.match(正则表达式,字符串) 不完全匹配,从字符串开头开始匹配,匹配到正则表达式对应的范围为止
# 返回值是匹配对象,如果匹配失败返回None
match = re.match('\w{3}', 'adahfjfksj')
print(match)
print(match.group())
print(match.string)
# 应用:判断一个字符串是否以某种字符串开头
# 4.search(正则表达式,字符串) 在指定的字符串中查找某种字符串(以正则表达式来描述),如果有多个满足条件的,只匹配第一个
# 返回值是匹配对象,若找不到则返回None
print(re.search(r'\d{2,}[a-z]', 'sh23n--877m0899'))
# 应用:判断一个字符串中是否包含某种字符串
# 5.findall(正则表达式,字符串) 去获取指定字符串中满足正则条件的所有的子串
# 返回值是列表,列表中是符合要求的字符串。没有满足要求的子串就返回[]
result = re.findall(r'\D\d+\D', 'as8d7ff8a7asd7')
print(result)
# 注意:在通过正则表达式获取子串的时候,可以通过在正则表达式中添加括号,来约束获取的内容(只获取括号中匹配到的内容)
# 匹配的时候还是按原正则表达式去查找
# 应用:字符串提取
# 6.finditer(正则表达式,字符串) 用法和findall一样,只是返回值的类型不一样
# 返回一个迭代器,迭代器中的内容是匹配对象
# 注意:()捕获部分无效
result = re.finditer(r'\D\d+\D', 'as8d7ff8a7asd7')
print(result.__next__())
print(result.__next__())
# print('ahsj27jkkaj7js8jsj'.split('sj')
# 7.split(正则表达式,字符串) 按正则表达式匹配到的字符串进行切割
# 返回值是列表,列表元素就切割后被分段的字符串
result = re.split(r'\d+', 'ahsj27jkkaj7js8jsj')
print(result)
# 8.sub(正则表达式, 新字符串, 原字符串) 在原字符串中查找符合正则的子串,替换成新的字符串
# 返回值是替换后的字符串
"""将制定字符串中所有的'sb'替换成'*'"""
str1 = '你好sb,你全家都是sb,cnm狗币傻东西'
result = re.sub(r'sb|傻|cnm', '**', str1)
print(str1, result)
网友评论