面向对象
类的基本写法
其他模块调用上面定义的类的写法
构造函数
①当实例化对象时候,会先自动调用构造函数,目的是初始化对象;
②python类里面一般默认定义的方法和变量都是公开的,如何变成私有的呢,在定义变量或者方法时候,在变量名或者方法名前面加上两个下划线,python就认为这是私有的变量,私有的变量或者方法,只能在类内部访问,不能再类外部访问。但是我们定义一个私有的变量后,仍然在类外面用对象名.私有变量名访问,python不会报错为什么?因为python是动态语言,这个方式并不是访问他的私有变量,而是动态的添加一个同名的私有变量,原先真正的私有变量会变成类名__私有变量名的形式
class Stu():
#sum1是类变量
sum1 = 0
name = ''
age = 0
#下面是定义的私有变量,只能在类里面访问
__score = 0
def __init__(self,name,age):
#类里面的实例方法,参数里面必须有self,代表调用这个方法的实例对象
self.name = name
self.age = age
#下面是通过self来访问(类变量),self.__class__是为了找到该对象的生成类
print(self.__class__.sum1)
#下面是定义的私有方法,只能在类里面访问
#下面是定义类方法的规则@classmethod 来定义类方法 cls指的是调用本类方法的类
#类方法,一般是用来操作类变量的
@classmethod
def yunsum1(cls):
cls.sum1 += 1
#这里是静态方法的定义规则
@staticmethod
def jingtai(x,y):
print('静态方法和类和实例没有多少关系,一般不怎么使用,也没有特别参数要求传入')
st1 = Stu('yang',18)
print(st1.name)
#下面是通过类名访问类变量
print(Stu.sum1)
面向对象三大特性
封装 继承 多态
1,继承(避免定义重复的方法和变量)
①子类可以继承父类的 类变量
②子类可以继承父类的 构造函数
③子类可以继承父类的 实例变量
④子类也可以继承父类的 实例方法
⑤python是多继承,但是我们推荐使用单继承
⑥对象调用实例方法,不用给self参数,【 而用类名调用实例方法的话,参数里面必须给self参数,否则就会报错
(或者参数里面给上一个对象才可以不报错);这个绝对不要用 】
⑦如果子类的方法,和父类的方法出现相同名字的方法,子类会优先调用子类的方法
注意:子类继承父类的规则
正则表达式
就是用来对字符串 文本进行筛选的
①,正则是匹配的单个字符
. 点是匹配除了换行符\n
以外的所有字符
上面的都是匹配一个字符或者字母,如果匹配一个单词呢?这里就需要用到数量词了
数量词,一般都是{3,6}或者{5}这样的写法,但是还有一些特殊的数量词字符
- 0或者多次出现
- 至少一次出现
? 0或者1次
前面是单个字符匹配和单词匹配;但是如何匹配完整的一个字符串呢?使用边界匹配
^ 从字符串的开头开始匹配
$ 从字符串的结尾开始匹配
前面学的,用数量词,只能让单个字符重复几次,比如下面
如上图,这样只能是匹配最后一个n重复三次
通过小括号括起来,可以让整个单词重复3次
中括号和小括号之间的逻辑关系
python的re.findall有第三个参数,是什么作用?
正则表达式模块re里面其他方法函数的用法 findall()是查找
①,替换
如上图,为什么要把函数作为参数传入进去呢,因为我们有时要根据匹配的不同字符,做出不同的处理,这样就能通过这个函数进行处理判断,然后把结果return回去,在替换掉字符串中匹配的字符
作为参数的函数,一般定义为convert(value)
JSON
是什么?
json字符串中,属性名和属性值都要加 双引号(必须是双引号),但是有一点,如果这个属性值是 数值类型,比如‘{ ‘age’ : 18 }’ 这个18是数值类型,如果是布尔值也不用加双引号,可以不用加引号
如果json是一个数组格式怎么办?
那如何,把python的一个数组转为json字符串呢?
python的序列列表,转为json对象的过程 叫序列化
json字符串转为python里面的序列或者字典的过程 叫做反序列化