复习day12
1.迭代器和生成器
- 迭代器:获取数据:next(迭代器),for循环遍历,数据来源:转换,生成器
- 生成器:就是迭代器
def 函数名():
yield 值
(表达 for 变量 in 序列 if 条件语句)
2.模块
- 模块就是py文件
- 包/库 就是文件夹
- 导入模块中所有的内容
from math import *
- 阻止调用执行
if __name__ == '__main__':
pass
3.异常处理
- try:
需要捕获异常的代码段 - except:
出现异常后对异常的处理代码 - finally:
不管try后面的代码是否异常,异常是否被捕获都会执行的代码
补充:三目运算符
中的三目运算符: 表达式?值1:值2 -- 判断表达是否为真:如果是整个运算的结果是值1 ,否者是值2
python的三目运算符:值1 if 表达式: else 值2
print('奇数' if 22 % 2 else '偶数')
一.类
1. 什么是类,什么是对象
1.1官方定义
- 类:就是拥有相同功能和相同属性的对象的集合
- 对象:就是累的实例
1.2生活角度看类和对象
- 如果人是类,yt就是对象,l也是对象
- 如果电脑是类,具体到单个实物就是对象
2. 类的声明
2.1 语法
class 类名:
类的内容
2.2 说明
- class:声明类的关键字固定写法
-
类名: 标识符,不能是关键字
见名知意 ,采用驼峰式命名(采用通过单词首字母大写的方式来区分不同的单词),首字母大写 -
: 固定写法
内的内容 - 主要包含: 类的说明文档, 属性(普通变量) ,功能(函数/方法)
class Person:
"""人类"""
# ========属性===========
# ========属性===========
pass
3.对象怎么声明
对象 = 类() - 创建指定的类的对象
4.类中的方法
4.1 什么是方法
- 声明在类中的函数就叫方法
4.2 类中的方法
- 有三种:对象方法,类方法,静态方法
4.2.1 对象方法
- 直接声明在类中的函数,
- 有默认参数self,通过对象调用的时候这个参数不用传参,因为系统会自动将当前对象传递给self
(self,当前对象 - 谁调用self就指向谁,当前类的对象能做的事情self都能做) - 通过类的对象来调用(记!!!)
# class Person:
# def eat(self, food):
# print('人吃' + food)
4.2.2 类的方法
- 声明函数前加@classmethod
- 有默认参数cls,通过类调用的时候这个参数不用传参,因为系统会自动将当前类传递给cls
- cls,当前类 - 谁调用谁就指向谁,当前类能做的事 cls
- 通过类来调用: 类.类方法
4.2.3 静态方法
- 声明函数前加@staticmethod
- 没有默认参数
- 通过类来调用:类.静态方法
class Person:
"""人类"""
#3 对象方法
def eat(self, food):
print(str(self) + '吃' + food)
self.study('python')
def study(self, type1):
print('学习'+type1)
#2 类方法
@classmethod
def destroy(cls):
cls.func1()
print('人类改变环境')
@classmethod
def func1(cls):
print('类方法')
#2 静态方法
@staticmethod
def beat_animal():
print("上课,睡觉,打豆豆")
p1 = Person()
p2 = Person()
p1.eat('鸡')
p2.eat('炸鸡')
Person.destroy()
Person.beat_animal()
二.类的属性
- 内中的属性分为:对象属性和字段
1.字段
- 直接声明在类中的变量就叫字段
- 字段要通过'类.字段'的方式来使用
- 当属性的值不会因为对象不同而不同,这种属性就可以声明成类的字段
class Dog:
"""狗"""
# =======字段========
numbers = 10
Dog.numbers =100
print(Dog.numbers)
2 对象属性
2.0什么数据init方法
- init是类默认继承的一个魔法方法,用来初始化类:本质是对象方法,但不需要程序员自己调用,会自动调用
class Person :
def __init__(self, name):
print(name +'init方法')
p1 = Person('你好')
- 通过类创建对象的时候,系统会自动调用类中的init方法,并且构造方法中的实参会全部传给init
- 创建对象的时候需不需要参数,需要几个参数,看这个内的init方法
- 了解 声明了的时候系统会自动给我们创建一个函数,这个函数的函数名和声明的类的类名一样,这个函数叫构造方法
- 函数会在内存中开辟空间创建对象,然后用创建的对象去调用类的init方法,然后才将对象返回
2.1对象属性
- 在init方法中,以'self.属性=值'的的形式声明
- 对象属性要通过'对象.属性'的方式来使用
- 当属性的值会因为对象的不同而不同的时候使用对象属性
class Dog:
"""狗"""
# =======字段========
numbers = 10
def __init__(self, name = '大黄', age = 2, gender = 'boy', color = '白色'):
self.color = color
self.gender = gender
self.age = age
self.name = name
d = Dog()
print(d.color)
print(d.gender)
print(d.age)
print(d.name)
print('======================')
d1 = Dog(name='巫妖王', color='黑色', age=999, gender='前方高能')
print(d1.color)
print(d1.gender)
print(d1.age)
print(d1.name)
- 练习: 声明一个学生类,用于属性:名字,电话,年龄,学号 拥有功能 学习(打印XXX在学XXX)
class Student_msg:
def __init__(self, name, tel='00000000000', age=0, number='stu9999',
gender='boy'):
self.name = name
self.tel = tel
self.age = age
self.number = number
self.gender = gender
numbers = 19292
def learing(self, subject: str):
print(Student_msg.numbers)
print('%s在学%s' % (self.name, subject))
a1 = Student_msg('大雕')
print(a1.number, a1.name, a1.gender, a1.age, a1.tel)
a1.learing('吃鸡')
a2 = Student_msg('大雕')
print(a1.number, a1.name, a1.gender, a1.age, a1.tel)
a1.learing('吃鸡')
3 声明类的时候方法的选择
- 1 对象方法:实现函数的功能需要对象属性的时候,就使用对象方法
- 2 类方法:实现函数的功能不需要对象属性,但是需要类的相关操作就使用类方法
- 3 静态方法:实现函数的功能即不需要对象属性,也不需要类相关的操作就使用静态方法
- 写一个矩形类,有属性:长和宽 方法:求面积,求周长
class Rect:
"""矩形"""
def __init__(self,weigh,height):
self.weigh = weigh
self.height = height
def area(self):
return self.height*self.weigh
def perimeter(self):
return (self.height+self.weigh)*2
def show_msg(self):
return '矩形%dX%d的周长是:%d 面积是:%d'%(self.weigh,self.height,self.perimeter(),self.area())
p = Rect(30, 60)
print(p.show_msg())
三. python中的对象属性支持增,删,改,查
class Dog:
def __init__(self, name):
self.name =name
self.age = 0
dog1 =Dog('大黄')
dog2 =Dog('猜猜')
1.查
- a.对象.属性 - 获取指定属性对应的值,如果属性不存在会报错
- b. getattr(对象,属性名,默认值) 获取指定属性对应的值
当属性不存在有默认值的时候不报错,返回默认值
没设置默认值的时候回报错
print(dog1.name)
print(getattr(dog1, 'name2', '无名狗'))
2.增,改
- a.对象.属性 = 值 - 当属性不存在就添加属性,当属性存在修改属性的值
- b.setattr(对象,属性名,值) - 当属性不存在就添加属性,当属性存在修改属性的值
dog1.name = '贝贝'
print(dog1.name)
a_name = 'color'
setattr(dog1, a_name, '白色')
print(dog1.color)
setattr(dog1, 'name', '静静')
print(dog1.name)
3 删
- del 对象.属性
- delattr(对象,属性名)
print(getattr(dog1, 'name', '无名狗,呜呜呜'))
del dog1.name
print(getattr(dog1, 'name', '无名狗,哦哦哦哦哦哦'))
delattr(dog2, 'age')
print(getattr(dog2, 'age', '还没出生的dog'))
- 注意对象属性的增删改查只针对单个对象